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执行完了。

0
0

双越

2022-08-22

如果你想解决 await 的问题,要把 setTimeout 去掉

否则微任务、宏任务混在一起,光说 await 的逻辑,就不好解释了。

0
0

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程