彻底理解 Promise 与 async/await
异步是前端绕不开的话题。刚开始学习时,我常被回调地狱和执行顺序搞晕。
后来慢慢明白:Promise 本质是对「未来某个结果」的封装,而
async/await 只是让异步代码写起来更像同步。
一、Promise 的三种状态
一个 Promise 只会处于 pending、fulfilled、
rejected 三种状态之一,且状态一旦改变就不可逆。
const p = new Promise((resolve, reject) => {
setTimeout(() => resolve('数据加载完成'), 1000);
});
p.then(res => console.log(res))
.catch(err => console.error(err));
二、用 async/await 改写
同样的逻辑,用 async/await 写会更直观:
async function loadData() {
try {
const res = await fetch('/api/list');
const data = await res.json();
return data;
} catch (err) {
console.error('请求失败:', err);
}
}
三、执行顺序的小测验
下面这段代码会打印出什么顺序?这是理解微任务的经典例子:
console.log('1 同步');
setTimeout(() => console.log('4 宏任务'), 0);
Promise.resolve().then(() => console.log('3 微任务'));
console.log('2 同步');
// 输出:1 → 2 → 3 → 4
结论:同步代码最先执行,微任务(Promise)优先于宏任务(setTimeout)。 把这条规律记牢,大部分异步顺序的题目都能推导出来。