【问题标题】:node.js v0.12.x changes in EventEmitter ruins inheritanceEventEmitter 中的 node.js v0.12.x 更改破坏了继承
【发布时间】:2015-09-04 20:56:20
【问题描述】:

node.js 0.12.x 中有一些与事件模块相关的变化。 此更改使我扩展 EventEmitter 类的代码无法使用。 这是在 node.js v0.10.35 中运行良好的代码: teh_emitter.js:

var EventEmitter = require('events');
var util = require('util');

util.inherits(TehEmitter, EventEmitter);


function TehEmitter(){

	EventEmitter.call(this);
}


TehEmitter.prototype.on('start', function (fCallback) {

	fCallback();
});

module.exports = TehEmitter;

test_teh_emitter.js:

var TehEmitter =  require('./teh_emitter');

describe('EventEmitter tests', function(){

	describe('#emit() function', function(){

		it('should fire start event', function(fCallback){

			var oEmitter = new TehEmitter(fCallback);

			oEmitter.emit('start', fCallback);

		});
	})
});

但是在 node.js v0.12.7 上它说: 0 次通过(2s) 1 次失败

1) EventEmitter tests #emit() function should fire start event:
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

我知道在 0.12.x 中应该分配: var EventEmitter = require('events'); (尽管require('events').EventEmitter; 应该仍然适用于向后兼容)。 但这无济于事。

我该如何解决这个问题?

【问题讨论】:

    标签: node.js inheritance eventemitter changelog


    【解决方案1】:

    这在2c6b424 中已更改,因为涉及事件处理程序的错误会渗入同一对象/“类”的所有其他实例(请参阅7157)。

    可能最好的兼容性选择是在构造函数中添加事件处理程序:

    function TehEmitter(){
      EventEmitter.call(this);
      this.on('start', onStart);
    }
    
    function onStart(fCallback) {
      fCallback();
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 2016-04-30
      • 2016-12-31
      • 1970-01-01
      • 2019-05-14
      相关资源
      最近更新 更多