import { CodeSandbox } from '@/components/CodeSandbox'
复习面试题 - 打印题 - Promise 执行顺序
题目 1:async/await
解释:await fn,这个fn仍然是同步,但是 await fn后面的成了微任务,所以会先打印 async1 end
题目 2:resolve
解释:resolve 不会阻止当前的同步执行,所以先打印3,4,执行完了同步再执行resolve,两个setTimeout,一个0,一个10,所以先打印6,2
题目 3:Promise链式调用
题目 4:then
解释:多个 then 都会执行
题目 5:Promise.all
解释:promise.all 会等待所有 promise 都执行完,然后执行 then
题目 6:事件循环
解释:清空完微任务再执行宏任务
总结
- await 会暂停 async 函数执行,await 之后的代码会作为微任务加入队列
- resolve 不会影响同步执行
- then 都会执行,默认是 return undefined
- 事件循环,先清空微任务,再执行宏任务