gpt4 book ai didi

javascript - 为什么使用await & EventEmitter时nodejs程序会退出?

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:11 24 4
gpt4 key购买 nike

看看这段代码:

const { EventEmitter } = require('events');

class Trigger extends EventEmitter {
constructor () {
super();
}

run() {
setTimeout(() => {
this.emit('done');
}, 1000);
}

waitUntilDone() {
const this_ = this;
return new Promise((resolve) => {
this_.on('done', () => {
resolve();
});
})
}
}

async function main() {
const tr = new Trigger();
tr.run();
console.log('run');
// 如果监听的事件永远不会抛出,则此处程序会直接退出
await tr.waitUntilDone().then(() => console.log('Promise done'));
await tr.waitUntilDone().then(() => console.log('Promise done'));
console.log('final done');
}

main();

程序将在第二个 await tr.waitUntilDone().t... 处退出,不记录任何内容。

即使是第二个 tr.waitUntilDone() 也永远无法获取事件,它应该永远等待,不是吗?

最佳答案

如果在第一个 promise 解决后重置计时器,程序将不会退出,直到最后一个 promise 解决。

async function main() {
const tr = new Trigger();
tr.run();
console.log('run');

await tr.waitUntilDone().then(() => {
console.log('Promise done');
// Reset the timer (this will keep the program alive)
tr.run();
});
await tr.waitUntilDone().then(() => console.log('Promise done'));
console.log('final done');
}

您将看到输出:

runPromise donePromise donefinal done

关于javascript - 为什么使用await & EventEmitter时nodejs程序会退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54191602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com