Node.js EventEmitter 无法立即发出
Node.js EventEmitter not working on immediate emit
以下问题:
我有一个 class save.js 从 EventEmitter 继承事件。
看起来很像:
var util = require('util');
var EventEmitter = require('events').EventEmitter;
var save = function(pdf){
var self = this;
EventEmitter.call(self);
console.log(self);
self.emit('test', 'TEST!');
function doSomeDatabaseStuff() {
db.connect(function(err, connection) {
if ( err ) self.emit('error', err);
else {
self.emit('test', 'TEST!');
}
});
}
util.inherits(save, EventEmitter);
module.exports = save;
我发起:
var saving = new save(pdf);
saving.on('sim', function(result){
console.log(result);
});
所以奇怪的行为是:永远不会发出 console.log(self) 之后的第一个发出事件。但是 logging self 显示这个 class 已经继承了 EventEmitter 特性。
所有其他事件正确发出。
有什么提示吗?
EventEmitter
的 emit
方法对所有当前注册的处理程序执行 同步 调用。
console.log
之后的 emit
在监听器尚未注册时被调用。这解释了为什么不调用此侦听器。
如果你真的想像你在这里做的那样在构造函数中发出一个事件,你应该让这个 emit
总是与
异步
setImmediate(function() {
self.emit('test', 'TEST!');
});
或者你可以有一个不活动的构造函数来配置和获取新构造对象的引用,然后有一个 .setup
或 .init
方法来启动事件 activity对象的。
以下问题:
我有一个 class save.js 从 EventEmitter 继承事件。
看起来很像:
var util = require('util');
var EventEmitter = require('events').EventEmitter;
var save = function(pdf){
var self = this;
EventEmitter.call(self);
console.log(self);
self.emit('test', 'TEST!');
function doSomeDatabaseStuff() {
db.connect(function(err, connection) {
if ( err ) self.emit('error', err);
else {
self.emit('test', 'TEST!');
}
});
}
util.inherits(save, EventEmitter);
module.exports = save;
我发起:
var saving = new save(pdf);
saving.on('sim', function(result){
console.log(result);
});
所以奇怪的行为是:永远不会发出 console.log(self) 之后的第一个发出事件。但是 logging self 显示这个 class 已经继承了 EventEmitter 特性。 所有其他事件正确发出。 有什么提示吗?
EventEmitter
的 emit
方法对所有当前注册的处理程序执行 同步 调用。
console.log
之后的 emit
在监听器尚未注册时被调用。这解释了为什么不调用此侦听器。
如果你真的想像你在这里做的那样在构造函数中发出一个事件,你应该让这个 emit
总是与
setImmediate(function() {
self.emit('test', 'TEST!');
});
或者你可以有一个不活动的构造函数来配置和获取新构造对象的引用,然后有一个 .setup
或 .init
方法来启动事件 activity对象的。