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

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

标签:event-loop,node-js,promise,settimeout,javascript
来源: https://codeday.me/bug/20191109/2012324.html