1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| "use strict"; console.log("main1");
process.nextTick(function () { console.log("process.nextTick1"); }); setTimeout(function () { console.log("setTimeout"); process.nextTick(function () { console.log("process.nextTick2"); }); }, 0); new Promise(function (resolve, reject) { console.log("promise"); resolve(); }).then(function () { console.log("promise then"); }); console.log("main");
|
- Node.js 提供的 nextTick 和 setImmediate
- nexTick 和 setImmediate 属于 node 中 process 模块中方法
- process.nextTick()属于 idle 观察者,setImmediate()属 check 观察者。
- 在每一轮循环检查中,idle 观察者先于 I/O 观察者,I/O 观察者先 check 观察者。
- idle 观察者,也就是事件轮询最先进行的任务 I/O 观察者,也就是事件轮询的任务(任务中的回调函数)
- check 观察者 事件轮询中的任务的结束
- 在具体实现上,process.nextTick()的回调函数保存在一个数中,setImmediate() 的结果则是保存在链表。在行为上 process.nextTick() 在每轮循环中会将数组中的回调函数全部行完。而 setImmediate() 在每轮循环中执行链表中的一个回调函数。