假设以下场景:
//Where "e" is a global object in the app
e = new EventEmitter;
...
//at some place in the app code I'm adding Listener 1
e.on('myEvent', function() {console.log('Listener 1)});
...
//at another place in the app code I'm adding Listener 2
e.on('myEvent', function() {console.log('Listener 2)});
...
//at another place in the app code I'm adding Listener N
e.on('myEvent', function() {console.log('Listener N)});
...
//finally in some place I'm emitting "myEvent"
e.emit('myEvent', p1, p2);
在执行“e.emit('myEvent',p1,p2)”的那一刻,我的代码控制着Node主线程(而不是事件循环)。并且“emit”函数是一个同步函数,因此“emit”此时正在调用每个附加到“myEvent”的监听器(在上面的示例中为 N 个监听器)。因此,实际上,调用“e.emit('myEvent', p1, p2)” 等价于在传统的命令式范式中进行以下调用:
Listener1(p1,p2);
Listener2(p1,p2);
...
ListenerN(p1,p2);
如果 N 很大,我会阻塞事件循环,导致我当前的代码控制主线程,而不是事件循环。
这种情况是真实的和可能的吗?是因为这个原因,默认情况下 Node.js 最多有 10 个侦听器吗?
提前致谢!