以下问题:
我有一个从EventEmitter继承事件的类save.js。
它看起来很像: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)之后的第一个emit事件。但是记录self表明该类已经继承了EventEmitter功能。 所有其他事件正确发出。 任何提示?
答案 0 :(得分:2)
$.ui.ddmanager.prepareOffsets(ui.draggable.draggable('instance'));
emit
方法对所有当前注册的处理程序进行同步调用。
在侦听器尚未注册时调用EventEmitter
之后的emit
。这就解释了为什么不调用这个监听器。
如果你真的想像在这里一样在构造函数中发出一个事件,那么你应该让这个console.log
始终与
emit
或者你可以拥有一个非活动的构造函数,以便配置和获取新构造的对象的引用,然后使用setImmediate(function() {
self.emit('test', 'TEST!');
});
或.setup
方法启动对象的事件活动。