我在節點是新的,所以下面的代碼的行爲是不明確的對我說:的Node.js:()setImmediate後http.request()觸發
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);
OUTPUT:
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)但是如果http.request()
沒有在輪詢中處理,它發生在什麼階段?特別是考慮到它在setImmediate()
之後有效。
我的Node.js版本是6.11.2。預先感謝您的解釋。
它稍後記錄它,因爲它正在等待*響應* – 2017-08-24 22:31:51