Есть ли проблемы с использованием асинхронной функции в качестве прослушивателя EventEmitter? - PullRequest
1 голос
/ 27 апреля 2019

Я пишу приложение Node.js v10, и я хотел бы использовать await в функции прослушивателя событий, поэтому я сделал функцию async прослушивателя.Основываясь на приведенном ниже коде, он, кажется, работает.

Но мне любопытно, есть ли скрытый недостаток или что-то, о чем я должен знать при регистрации функции async в качестве слушателя EvenEmitter с использованием on() метод?Что-нибудь может вернуться позже, чтобы укусить меня?

const EventEmitter = require('events');

const emitter = new EventEmitter();

const syncListener = () => {
  console.log('sync bar ');
};

const asyncListener = async () => {
  console.log('async bar');
};

emitter.on('foo', asyncListener);
emitter.on('foo', syncListener);

emitter.emit('foo');

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Возвращаемое значение обработчиков событий полностью игнорируется.Из документации :

Когда объект EventEmitter генерирует событие, все функции, связанные с этим конкретным событием, вызываются синхронно.Любые значения, возвращаемые вызываемыми прослушивателями, игнорируются и будут отброшены.

Так что пометка слушателя как асинхронного (другими словами, возвращение обещания) не имеет значения, за исключением случаев, когда @Ry упоминает с возможнымнеобработанные исключения.Если вам нужно, чтобы обработка событий происходила последовательно, вам, возможно, придется сделать что-то еще (вы также можете проверить асинхронная или синхронная документация )

0 голосов
/ 27 апреля 2019

Ну нет, не то, что я знаю. Я использую асинхронные функции в обратных вызовах EventEmitter абсолютно везде в моем коде. Из того, что я могу сказать, нет недостатка.

...