一个头条实例

  1. // 今日头条面试题
  2. async function async1() {
  3. console.log('async1 start')
  4. await async2()
  5. console.log('async1 end')
  6. }
  7. async function async2() {
  8. console.log('async2')
  9. }
  10. console.log('script start')
  11. setTimeout(function () {
  12. console.log('settimeout')
  13. })
  14. async1()
  15. new Promise(function (resolve) {
  16. console.log('promise1')
  17. resolve()
  18. }).then(function () {
  19. console.log('promise2')
  20. })
  21. console.log('script end')

基础知识

事件循环(Event Loop)、宏任务(Marco Task)与微任务(Misco Task)

解题思路

三个三个队列:A: 当前执行,B: 微任务,C: 宏任务

console.log(‘script start’) => A

setTimeout => C

console.log(‘async1 start’) => A

console.log(‘async2’) => A

console.log(‘async1 end’) => B

console.log(‘promise1’) => A

console.log(‘promise2’) => B

console.log(‘script end’) => A

分别输出ABC
script start
async1 start
async2
promise1
script end
async1 end
promise2
setTimeout