编写我自己的事件发射器失败

时间:2016-06-14 11:57:14

标签: node.js

我正在尝试根据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!')
})

1 个答案:

答案 0 :(得分:1)

问题是您的整个代码都是同步的。

作为调用kenny.cooking()的一部分,cooked事件会被发出(同步),但此时您还没有为该事件附加一个侦听器。

如果您使_cook方法异步,它将起作用:

function _cook(a,cb) {
  console.log('frying it',a)
  setImmediate(function() {
    cb(a);
  });
}