我正在浏览节点文档,并试图了解此功能
server.on('connection', (stream) => {
console.log('someone connected!');
});
emitter.on(eventName, listener)
我感到困惑的部分是这个;特定部分以粗体显示。 “将侦听器函数添加到 名为eventName的事件的侦听器数组的末尾。”
for是否表示所有发射器(在本例中是服务器)都有一个侦听器数组,并且该数组中的某些功能“针对”某些事件(如指定)。或者,这是否意味着所有事件都有一个侦听器数组,并且只会将此函数(流)添加到事件“连接”中。
如果是后者,那么eventlistenerarray [lastindex aka(stream)]如何知道它仅在事件在Emmiter ...服务器上发生时才运行?
答案 0 :(得分:1)
TL; TR:
您为每个对象附加了事件以存储自己的事件(独立于其他对象)
_每个事件名称具有其自己的(有序)函数数组(独立于同一对象中的其他事件)
详细信息:
您可以很好地举例说明它的结构和存储在this section of the Node documentation on events
中const myEmitter = new MyEmitter();
myEmitter.on('myEvent', function(a, b) {
console.log(a, b, this, this === myEmitter);
// Prints:
// a b MyEmitter {
// domain: null,
// _events: { myEvent: [Function] },
// _eventsCount: 1,
// _maxListeners: undefined } true
});
myEmitter.emit('myEvent', 'a', 'b');
您可以看到,当记录this
(事件已附加到的对象)时,事件处理程序将存储在对象本身内部(在属性_events
中)。它采用对象的形式,其中所有事件名称都是键,而值是该事件附带的所有函数的数组。这是数组的事实很重要,因为函数将被同步调用并按添加顺序被调用。
答案 1 :(得分:0)
发射器(在本例中为服务器)跟踪所有连接的事件侦听器,没有全局事件侦听器数组。