await异步的问题
来源:8-12 async-await是语法糖,异步的本质还是回调函数

慕工程1096074
2022-08-22
如果await后面的内容可以看做是callback, 为啥这里打印的不是 first, second, third?
async function fn1(){
setTimeout(() => {
console.log("first");
}, 1000);
}
async function fn2(){
setTimeout(() => {
console.log("second");
}, 200);
}
async function fn3(){
setTimeout(() => {
console.log("third");
}, 100);
}
(async function run(){
await fn1()
await fn2()
await fn3()
})()
写回答
2回答
-
Best_Coder_LCN
2023-03-17
fn1 fn2 fn3 内的函数返回的都是undefined,把定时器的内容放入宏任务待执行就已经算是执行完函数体了,
自然可以继续执行 fn2 fn3,至于settimeout什么时候执行,不影响 fn2 fn3的执行。
又因为fn3 settimeout设定时间最短,所以最先执行。
关键的点就是:
不是fn1 内的settimeout都打印了,才算fn1执行完了。
00 -
双越
2022-08-22
如果你想解决 await 的问题,要把 setTimeout 去掉
否则微任务、宏任务混在一起,光说 await 的逻辑,就不好解释了。
00
相似问题