Event Loop

  • A+
所属分类:Web前端
摘要

文章

文章

console.log('1');  setTimeout(function() {     console.log('2');     process.nextTick(function() {         console.log('3');     })     new Promise(function(resolve) {         console.log('4');         resolve();     }).then(function() {         console.log('5')     }) }) process.nextTick(function() {     console.log('6'); }) new Promise(function(resolve) {     console.log('7');     resolve(); }).then(function() {     console.log('8') })  setTimeout(function() {     console.log('9');     process.nextTick(function() {         console.log('10');     })     new Promise(function(resolve) {         console.log('11');         resolve();     }).then(function() {         console.log('12')     }) })  
  • 整体代码作为一个宏任务进入,开始第一个循环
  • 执行同步 //1
  • stime1 放入宏任务队列任务
  • process.nextTick ,process1进入微任务队列,
  • new promise 立即执行 //7
  • then1放入微任务队列
  • stime2 放入入宏任务队列
  • 完成第一个宏任务(整体代码script)
  • 执行微任务process1 then1 //6 8
  • 结束第一次循环,开始第二次循环,执行宏任务stime1,//2
  • process2放入微队列中
  • new promise //4
  • 添加微任务then2
  • 执行微任务process2 then2 结束第二次循环 // 3 5
  • 执行宏任务stime2 // 9
  • 新增微任务process3
  • new promise //11
  • 添加微任务then3
  • 执行process3 then3 结束第三次循环 // 10 12
    所以输出结果1 7 6 8 2 4 3 5 9 11 10 12