如何从nodejs中的构造函数发出/捕获事件?

时间:2015-08-19 07:47:46

标签: node.js events constructor

已经有很多问题,如何从nodejs中的构造函数发出事件。大多数此类问题 - 事件在添加侦听器之前触发:

typedef struct {
    int a;
    int b;
} abc;

extern "C"  
{
     __declspec(dllexport) abc mainfun()
     {
         abc obj;
         obj.x = 1;
         obj.y = 2;
         return obj;
     }
}

有一种解决方法:仅在var fooBar = new FooBar() // event is emitted fooBar.on('event', function(){}); // never will be executed event is fired之后在构造函数中触发事件。在这种情况下,只能添加一个侦听器。这是正常做法吗?

我看到readline实际上提供了相同的接口:

newListener

使用var io = readline.createInterface({ input: process.stdin, terminal: false }); io.on('line', function(line) {}); // listener is added after constructor 事件吗?

1 个答案:

答案 0 :(得分:4)

以下是另一种解决方法,使用setImmediate

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

function FooBar() {
  var instance = this;
  EventEmitter.call(instance);
  setImmediate(function() {
    instance.emit('event', 'hello world');
  });
}

inherits(FooBar, EventEmitter);

var fooBar = new FooBar();
fooBar.on('event', function(value) {
  console.log('got event:', value);
});

这使得事件发生异步,这意味着它将被调度,直到运行任何同步代码(如调用构造函数和添加事件侦听器)之后。