【发布时间】:2018-02-02 22:25:43
【问题描述】:
我是 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() 是一个 check 阶段,应该在 poll 之后在事件循环中处理。如果我理解正确,nextTick() 之后的http.request() 应该是那个 poll 阶段;
2) 但如果http.request() 没有在poll 中处理,它会在哪个阶段发生?特别是考虑到它在setImmediate() 之后有效。
我的 Node.js 版本是 6.11.2。提前感谢您的解释。
【问题讨论】:
-
它稍后会记录它,因为它正在等待响应
标签: javascript node.js event-loop setimmediate