【发布时间】:2019-01-31 11:54:00
【问题描述】:
const fs = require("fs");
fs.readFile("aa.js", () => {
console.log("1");
process.nextTick(() => {
console.log("3");
});
});
fs.readFile("aa.js", () => {
console.log("2");
process.nextTick(() => {
console.log("4");
});
});
// 结果是 1 3 2 4
const net = require("net");
const server = net.createServer(() => {}).listen(8080);
server.on("listening", () => {
console.log("1");
process.nextTick(() => {
console.log("3");
});
});
server.on("listening", () => {
console.log("2");
process.nextTick(() => {
console.log("4");
});
});
// 结果是 1 2 3 4
IMO,这两个异步回调的行为应该相同, 但结果不同, 幕后原因是什么?
【问题讨论】:
-
当监听事件触发时,两个监听处理程序都被添加到事件队列中——直到事件队列清空
next tick queue才会被处理
标签: javascript node.js asynchronous event-loop libuv