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