Что ж, мой пример был придуман (не было возможности) - я на самом деле делаю поток -> асинхронное итеративное преобразование (вот почему я смешиваю три). Я предполагаю, что вы говорили о функции, возвращающейся, когда вы говорите «разрешено», но в контексте обещания «разрешать» - это когда обещание завершается. Вот почему ваш ответ на первый взгляд кажется неверным.

я действительно странная проблема, когда я ожидаю обещание, которое прошло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, Что-то не так с моим кодом или это ошибка узла?

Ответы на вопрос(2)

Ваш ответ на вопрос