是否可以在nodejs中的“ newListener”事件的事件侦听器回调中发出事件?

时间:2018-10-15 06:54:36

标签: node.js

是否可以在nodejs中的'newListener'事件的事件侦听器回调中发出事件?

例如

var EventEmitter = require('events');
var eventEmitter = new EventEmitter.EventEmitter();

eventEmitter.on('newListener', function(test) {
  eventEmitter.emit('data', 'testing');
  console.log('newListener');
});

eventEmitter.on('data', function(test){
  console.log(test)
});

我确实看到了日志条目“ newListener”,但没有看到针对“数据”的回调。

1 个答案:

答案 0 :(得分:1)

问题是在newListener内部,新的侦听器尚未激活。使用process.nextTick()

const EventEmitter = require('events');
var eventEmitter = new EventEmitter.EventEmitter();

eventEmitter.on('newListener', function(event) {
    if (event === 'data') {
        process.nextTick(() => {
            eventEmitter.emit('data', 'testing');
        });
    }
    console.log('newListener', event);
});

eventEmitter.on('data', function(test) {
    console.log('data', test)
});