我正在尝试根据this totorial编写一个事件发射器。
但是最后的事件on('cooked')
不会触发,为什么?
var events = require('events');
function Dummy() {
events.EventEmitter.call(this);
}
Dummy.super_ = events.EventEmitter;
Dummy.prototype = Object.create(events.EventEmitter.prototype, {
constructor: {
value: Dummy,
enumerable: false
}
});
function _cook(a,cb) {
console.log('frying it',a)
cb(a)
}
Dummy.prototype.cooking = function(chicken) {
var self = this;
self.chicken = chicken;
self.cook = _cook; // assume dummy function that'll do the cooking
self.cook(chicken, function(cooked_chicken) {
console.log('callback')
self.chicken = cooked_chicken;
self.emit('cooked', self.chicken);
});
return self;
}
var kenny = new Dummy();
fried_chix = {type:'tasty'}
var dinner = kenny.cooking(fried_chix);
dinner.on('cooked', function(chicken) {
console.log('we can eat now!')
})
答案 0 :(得分:1)
问题是您的整个代码都是同步的。
作为调用kenny.cooking()
的一部分,cooked
事件会被发出(同步),但此时您还没有为该事件附加一个侦听器。
如果您使_cook
方法异步,它将起作用:
function _cook(a,cb) {
console.log('frying it',a)
setImmediate(function() {
cb(a);
});
}