JavaScript同步任务先于异步任务执行,那为什么图中异步任务b在a未结束运行的时候就开始执行?

  • 1.js的执行顺序,先同步后异步
  • 2.异步中任务队列的执行顺序: 先微任务microtask队列,再宏任务macrotask队列

注意以上都是 队列,先进先出。

在node环境下,process.nextTick的优先级高于Promise,也就是可以简单理解为:在宏任务结束后会先执行微任务队列中的nextTickQueue部分,然后才会执行微任务中的Promise部分。

上面是同步执行的代码,然后看剩下的异步执行的代码:

首先,setTimeout是 宏观任务,排除到最后,剩下微观任务:

综上所述,以上代码执行的顺序是:

  • 1. 同样先执行同步代码,且先把setTimeout去掉:

只剩下宏观任务(微观任务在宏观任务里,也就是宏观任务外面不在有微观任务了)

  • 5. 再执行上面的 resolve,对应的是下面的then函数:

剩下的都是微观任务和宏观任务,先看微观任务:

解释如下:【同步>异步;微任务>宏任务】第一步:打印出1、9;如图

由图a中的任务队列可知:
第二步: 执行微任务3,打印出5;
第三步:执行宏任务1,打印出0,
第四步:开始执行宏任务2;如图:

第五步:由图b中的任务队列可知, 执行微任务4,打印出6,如图:

第六步:由图c中的任务队列可知, 执行微任务5,打印出2;如图

由图d的任务队列可知,
第七步:执行微任务6,打印出7;
第八步:执行微任务9,打印出4;
第九步:执行宏任务7,打印出8;
第十步:执行宏任务8,打印出3;

到此这篇关于JS异步执行顺序的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

}

JavaScript执行机制,重点有两点:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

}

我要回帖

更多关于 django异步任务进度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信