使用异步函数作为 EventEmitter 侦听器有什么问题吗?

Mog*_*lum 3 javascript asynchronous node.js eventemitter

我正在编写一个 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');
Run Code Online (Sandbox Code Playgroud)

小智 5

事件处理程序的返回值被完全忽略。从文档

EventEmitter对象发出一个事件时,所有附加到该特定事件的函数都会被同步调用。被调用的侦听器返回的任何值都将被忽略并被丢弃。

因此,将侦听器标记为异步(换句话说,返回承诺)并不重要,除非@Ry 提到可能存在未处理的异常。如果您需要按顺序处理事件,那么您可能需要做进一步的事情(您可能还想查看异步与同步文档