打印什么

  1. async function async1() {
  2. console.log("async1 start");
  3. await async2();
  4. console.log("async1 end");
  5. }
  6. async function async2() {
  7. console.log( 'async2');
  8. }
  9. console.log("script start");
  10. setTimeout(function () {
  11. console.log("settimeout");
  12. });
  13. async1()
  14. new Promise(function (resolve) {
  15. console.log("promise1");
  16. resolve();
  17. }).then(function () {
  18. console.log("promise2");
  19. });
  20. setImmediate(()=>{
  21. console.log("setImmediate")
  22. })
  23. process.nextTick(()=>{
  24. console.log("process")
  25. })
  26. console.log('script end');

第一轮:

current task:”script start”,”async1 start”,’async2’,”promise1”,“script end” micro task queue:[async,promise.then,process] macro task queue:[setTimeout,setImmediate]

第二轮

current task:process,async1 end ,promise.then micro task queue:[] macro task queue:[setTimeout,setImmediate]

第三轮

current task:setTimeout,setImmediate micro task queue:[] macro task queue:[]

最终结果:[script start,async1 start,async2,promise1,script end,process,async1 end,promise2,setTimeout,setImmediate] 同样”async1 end”,”promise2”之间的优先级,因平台而异。