NodeJS EventEmitter:使用事件名称作为“*”(星号)

时间:2016-12-24 22:06:56

标签: javascript node.js eventemitter

我正在尝试从一个开源项目中了解一些代码片段,我不明白用星号EventEmitter.emit作为事件名称调用'*'的方法。

在某些库(如JQuery)中,'*'作为事件名称意味着“所有事件”。

在EventEmitter的上下文中它意味着什么?

我试图在这个项目中找到'*'事件的监听器,但没有运气。

class BlaBla extends EventEmitter {

    methodCall(event){
        this.emit("*", {event}); // <- what does this mean ???
    }
}

2 个答案:

答案 0 :(得分:0)

this.emit("*", {event});表示调用emit()方法将执行使用on方法注册的所有函数。

答案 1 :(得分:0)

使用CREATE TABLE tables (name_tables VARCHAR2(60) ,tuple VARCHAR2(50), taille_tuple VARCHAR2(50)) 作为事件名称没有特殊效果,它表现为普通事件。

您可以查看event emitter code,看看唯一的特殊事件名称是:

示例(repl.it code

'*'

输出

const {
  EventEmitter
} = require('events');

class BlaBla extends EventEmitter {

  methodCall(stuff) {
    this.emit("*", {
      stuff // <-- this gets passed as an argument to the handler for the '*' event
    });
  }
}

const b = new BlaBla();

b.on('a', (...args) => console.log('nope', ...args)); // <-- this doesn't run
b.on('b', (...args) => console.log('nope', ...args)); // <-- this doesn't run
b.on('*', (...args) => console.log('this gets called', ...args)); // <-- This runs

b.methodCall('this gets passed down');

如果在此特定项目中调用this gets called { stuff: 'this gets passed down' } 时调用所有事件处理程序,则他们可能会手动执行此操作。

这是一个如何完成的简化示例:

this.emit('*')