掌握异步 JavaScript:回调、Promises 和 Async/Await
理解 JavaScript 异步编程
JavaScript 中的异步编程对于处理耗时任务(例如从 API 获取数据、读取文件或与数据库交互)至关重要。它确保 JavaScript 即使在执行耗时操作时也能保持非阻塞和响应。
同步与异步编程
console.log("Task 1");
console.log("Task 2");
console.log("Task 3");输出:
Task 1 Task 2 Task 3
console.log("Task 1");
setTimeout(() => console.log("Task 2"), 1000);
console.log("Task 3");输出:
Task 1 Task 3 Task 2
JavaScript 异步中的关键概念
function fetchData(callback) {
setTimeout(() => {
console.log("Data fetched");
callback();
}, 1000);
}
fetchData(() => console.log("Callback executed"));**例子**:
const promise = new Promise((resolve, reject) => {
let success = true;
if (success) resolve("Operation successful");
else reject("Operation failed");
});
promise
.then(result => console.log(result))
.catch(error => console.error(error));async function fetchData() {
try {
const response = await fetch("https://api.example.com/data");
const data = await response.json();
console.log(data);
} catch (error) {
console.error("Error fetching data:", error);
}
}
fetchData();常见异步操作
setTimeout(() => console.log("Executed after 1 second"), 1000);
setInterval(() => console.log("Repeats every second"), 1000);fetch("https://api.example.com/data")
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));document.querySelector("button").addEventListener("click", () => {
console.log("Button clicked");
});异步代码中的错误处理
fetch("https://api.example.com/data")
.then(response => response.json())
.catch(error => console.error("Error:", error));async function fetchData() {
try {
const data = await fetch("https://api.example.com/data");
console.log(data);
} catch (error) {
console.error("Error fetching data:", error);
}
}异步 JavaScript 的最佳实践
asyncTask1(() => {
asyncTask2(() => {
asyncTask3(() => {
console.log("Tasks complete");
});
});
});承诺解决方案:
asyncTask1()
.then(() => asyncTask2())
.then(() => asyncTask3())
.then(() => console.log("Tasks complete"))
.catch(error => console.error(error));const promise1 = fetch("https://api.example.com/data1");
const promise2 = fetch("https://api.example.com/data2");
Promise.all([promise1, promise2])
.then(responses => Promise.all(responses.map(res => res.json())))
.then(data => console.log(data))
.catch(error => console.error(error));结论
了解异步编程对于构建高效且响应迅速的 JavaScript 应用程序至关重要。通过掌握回调、承诺和异步/等待,您可以编写更干净、更易于维护的异步代码,有效地处理错误,并优化实际应用程序的性能。掌握 JavaScript 异步是现代 Web 开发的关键。