Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js处理未设置错误事件_Javascript_Node.js - Fatal编程技术网

Javascript node.js处理未设置错误事件

Javascript node.js处理未设置错误事件,javascript,node.js,Javascript,Node.js,我正在处理一个发出事件的模块,其中一个是“错误”事件 例如: 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之前发出该事

我正在处理一个发出事件的模块,其中一个是“错误”事件

例如:

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()
来“等待”下一轮事件循环,则基本上可以推迟事件的发出,直到添加了侦听器。

这是一个很好的解决方案

EventEmitter
事件是纯JS的,不在事件循环中安排;它们是同步交付的

在您的情况下,在有侦听器之前发出事件,因为只有在发出事件之后才添加侦听器。如果使用
setImmediate()
“等待”下一轮事件循环,则基本上会推迟事件的发出,直到添加了侦听器