原文链接
文章系列路线图
- NodeJS 事件循环(第一部分)- 事件循环机制概述
- NodeJS 事件循环(第二部分)- Timers,Immediates,nextTick
- Nodejs 事件循环(第三部分)- Promise,nextTicks,immediate
- NodeJS 事件循环(第四部分)- 处理 IO
- NodeJS 事件循环(第五部分)- 最佳实践
欢迎回到事件循环系列文章!在这个系列的第 1 部分,我们讨论了 Node.js 事件循环的整体情况。在之后的第 2 部分,我们在事件循环的上下文中讨论了计时器(timers)和immediates,以及每个队列是如何调度的。接下来在这篇文章中,让我们看下事件循环如何调度 完成的/失败的 promise(包括原生 JS promise,Q promises 和 Bluebird Promise)和下一轮回调(next Tick callback)。
原生 Promises
在原生 promises 的上下文中,一个 promise 的回调被看成一个微任务和在微任务队列中入队,在 next tick 队列后面处理。
考虑下面的示例。
Promise.resolve().then(() => console.log('promise1 resolved'));
Promise.resolve().then(() => console.log('promise2 resolved'));
Promise.resolve().then(() => {
console.log('promise3 resolved');
process.nextTick(() => console.log('next tick inside promise resolve handler'));
});
Promise.resolve().then(() => console.log('promise4 resolved'