我有一个非常奇怪的问题,即等待已将其传递resolve
给事件发射器回调的 Promise只是退出进程而不会出错。
const {EventEmitter} = require('events');
async function main() {
console.log("entry");
let ev = new EventEmitter();
let task = new Promise(resolve=>{
ev.once("next", function(){resolve()}); console.log("added listener");
});
await task;
console.log("exit");
}
main()
.then(()=>console.log("exit"))
.catch(console.log);
process.on("uncaughtException", (e)=>console.log(e));
当我运行它时,我希望该过程停止,因为显然“下一步”目前从未发出。但我得到的输出是:
条目
添加监听器
然后 nodejs 进程优雅地终止。
我认为这是什么做的垃圾收集器,但ev
并task
显然还是在范围main
。所以我真的不知道为什么这个过程完全没有错误地退出。
很显然,我会最终发出的事件,但我已经简化我的代码上面的重现。我在node v8.7.0
。我的代码有问题还是这是一个节点错误?