我是 Node 的新手,所以我不清楚以下代码行为:
function step(iteration) {
if (iteration === 10) return;
process.nextTick(() => {
step(iteration + 1); // Recursive call from nextTick handler.
console.log(`nextTick iteration: ${iteration}`);
});
http.request({hostname: '127.0.0.1', port: 5000}, (response) => {
console.log("here !");
}).end();
setImmediate(() => {
console.log(`setImmediate iteration: ${iteration}`);
});
}
step(0);
输出:
nextTick iteration: 0
...
nextTick iteration: 9
setImmediate iteration: 0
...
setImmediate iteration: 9
here !
here !
here !
here !
here !
here !
here !
here !
here !
here !
问题是:
1)为什么http.request()
会在之后触发回调setImmediate()
?我不明白,为什么setImmediate()
通常被称为:它的回调是在循环期间注册的。但正如文档所说,这setImmediate()
是一个检查阶段,应该在轮询后在事件循环中处理。如果我理解正确的话,http.request()
应该nextTick()
是那个轮询阶段;
2)但是如果在pollhttp.request()
中没有处理,它会在哪个阶段发生?特别是考虑到它在.setImmediate()
我的 Node.js 版本是 6.11.2。提前感谢您的解释。