JavaScript 异步编程全指南:从回调到 Async/Await
理解浏览器与 Node.js 的事件循环是写好异步代码的第一步。核心在于任务队列与微任务队列的调度。
事件循环与任务队列
// 宏任务与微任务示例
console.log('A');
setTimeout(() => console.log('B - macro'), 0);
Promise.resolve().then(() => console.log('C - micro'));
console.log('D');
// 输出:A D C - micro B - macro
Promise 关键语义
- 状态不可逆:pending → fulfilled/rejected
- then 永远异步执行(微任务)
async/await 最佳实践
async function fetchJSON(url) {
const res = await fetch(url);
if (!res.ok) throw new Error('Request failed');
return res.json();
}
async function main() {
try {
const data = await fetchJSON('/api');
console.log(data);
} catch (e) {
console.error(e);
}
}
main();
避免在循环中串行 await;可用 Promise.all 并行化独立请求。