我已经使用nodejs事件发射器创建了一个非常非常基本的nodejs事件循环实现,我正在寻找是否错过了任何东西的输入。评论和建议表示赞赏:
const eventEmitter = new (require("events"))();
let events = [
"poll",
"check",
"close-callbacks",
"timers",
"pending-callbacks",
"idle-prepare",
];
eventEmitter.once("poll", () => {
console.log("in poll");
eventEmitter.once("nextTick", () => console.log("nextTick 1"));
});
eventEmitter.once("nextTick", () => {
console.log("nextTick 2");
eventEmitter.once("check", () => console.log("check 1"));
eventEmitter.once("nextTick", () => console.log("nextTick 3"));
eventEmitter.once("timers", () => console.log("timers 1"));
eventEmitter.once("poll", () => console.log("poll 2"));
});
while (true) {
for (let event of events) {
eventEmitter.emit(event);
eventEmitter.emit('nextTick');
}
const totalLength = events.reduce((sum, item) => {
return sum + eventEmitter.listenerCount(item);
}, 0);
console.log(totalLength);
if (totalLength === 0) {
return;
}
}
[请在nodejs中找到有关事件循环的小文章,它说明了如何为nodejs在单线程环境中工作提供敏捷性。