标签:event-loop node-js promise settimeout javascript
我在问题的两个不同部分考虑整个JS环境.
> JS引擎
>浏览器API,节点API(JS引擎外部).
JavaScript引擎(V8,SpiderMonkey)是单线程的,在ES6之前,没有机制可以在JavaScript中运行异步代码,直到ES6引入Promise概念.
我了解在诺言出现之前,浏览器或Node API(服务器端JS)用于提供使用setTimeout和Process.nextTick异步运行代码的机制,并且由于Promises在本机上受支持在Javascript中运行异步代码,因此,我试图了解如何promise回调和setTimeout被安排为先运行.
这是否意味着存在两个事件循环并且它们相互协调?首先在浏览器/节点API中运行setTimeout和Process.nextTick中的代码,然后在JS引擎中运行承诺回调,如果没有,则如何安排它们,因为JS引擎中不存在setTimeout和Process.nextTick定义,但是Promise定义Promise是ES6标准,因此必须存在于JS引擎中.
我也想了解任务队列,作业队列,微任务在哪里进行管理,内部JS引擎或外部引擎(在浏览器或Node API中)的位置.
解决方法:
两个主要的js运行时引擎:
>浏览器
> nodejs(V8)
在浏览器(谷歌浏览器)中:
MacroTask:
> setTimeout
> setInterval
MicroTask:
>承诺
执行顺序:
Promise> Promise.then> setTimeout
在nodejs运行时:
微任务:
> process.nextTick
>承诺
宏任务:
> setTimeout
> setInterval
> setImmediate
> I / O
执行顺序:
promise> process.nextTick> promise.then > setImmediate> setTimeout
关于事件循环的很多文章.给您一些参考,以帮助您了解该理论:
> How JavaScript works: Event loop and the rise of Async programming + 5 ways to better coding with async/await
> event-loop
> event-loop-timers-and-nexttick
标签:event-loop,node-js,promise,settimeout,javascript 来源: https://codeday.me/bug/20191109/2012324.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。