Что ж, мой пример был придуман (не было возможности) - я на самом деле делаю поток -> асинхронное итеративное преобразование (вот почему я смешиваю три). Я предполагаю, что вы говорили о функции, возвращающейся, когда вы говорите «разрешено», но в контексте обещания «разрешать» - это когда обещание завершается. Вот почему ваш ответ на первый взгляд кажется неверным.
я действительно странная проблема, когда я ожидаю обещание, которое прошлоresolve
обратному вызову генератора событий просто завершает процесс без ошибок.
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));
Я ожидаю, что процесс остановится, когда я выполню это, потому что ясно, что "next" в настоящее время никогда не генерируется. но вывод я получаю:
запись
добавлен слушатель
и тогда процесс nodejs завершается изящно.
Я думал, что это как-то связано с сборщиком мусора, ноev
а такжеtask
явно все еще в областиmain
, Так что я действительно в растерянности относительно того, почему процесс завершается полностью без ошибок.
Очевидно, ябыло бы в конце концов создайте событие, но я упростил свой код до приведенного выше для воспроизведения. Я наnode v8.7.0
, Что-то не так с моим кодом или это ошибка узла?