【发布时间】:2019-12-18 14:08:53
【问题描述】:
我在事件处理程序中实现 await 时遇到问题。出于某种原因,事件处理程序在开始新进程之前不会等待第一个进程完成。为什么会出现这种奇怪的行为?
const { EventEmitter } = require("events");
let alreadyRunning = false;
const sampleEventHandler = new EventEmitter();
sampleEventHandler.on("data", async (message) => {
await heavyProcess(message);
});
async function heavyProcess(message) {
console.log("New message: ", message);
console.log("already running?: ", alreadyRunning);
if (alreadyRunning) {
console.log("Why doesn't it await for first task to complete fully before entering here?");
}
const rand = Math.random() * 1000;
// set var here
alreadyRunning = true;
await sleep(rand);
// unset here
alreadyRunning = false;
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// Emit event 5 times
for (let i = 0; i < 5; i++) {
sampleEventHandler.emit("data", i);
}
【问题讨论】:
标签: node.js es6-promise eventemitter