微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript-如何通过JS引擎或浏览器/节点外部API来调度与setTimeout相比的promise回调?

我在问题的两个不同部分考虑整个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)

在浏览器(谷歌浏览器)中:

javascript event-loop in browser

MacroTask:

> setTimeout
> setInterval

MicroTask:

>承诺

执行顺序:

Promise> Promise.then> setTimeout

在nodejs运行时:

nodejs event-loop

微任务:

> 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐