Node.js正在处理未设置错误事件

node.js handling unset error event

本文关键字:设置 错误 事件 处理 js Node      更新时间:2023-09-26

我正在研究一个发出事件的模块,其中一个是'error'事件。

例如:

function A() {}
function A.prototype.start() {
 var error = true;
 if (error) {
  this.emit('error', error);
 }
 return this;
}
var a = new A()
a.on('error', function(err) {})

发生的情况是,即使我正在侦听错误事件,事件也会被发出,我猜是在侦听器注册或返回this之前。我所做的是将emit包装在setImmediate中,例如:

function A.prototype.start() {
 var error = true;
 if (error) {
  setImmediate(function() {
   this.emit('error', error);
  });
 }
 return this;
}

一般来说,这样可以吗?或者是否有更好的方法来处理这种情况和类似的情况。

这是个好办法。

EventEmitter事件是纯js的,不被安排在事件循环;它们是同步发送的。

在您的情况中,在有侦听器之前触发事件,因为只有在事件被触发之后才添加侦听器。如果您"等待"事件循环的下一轮,那么通过使用setImmediate(),您基本上可以将事件的发出推迟到添加了侦听器之后。