为什么要先注册监听器,然后在node.js中调用emit方法??can';我们不能颠倒顺序,仍然可以工作吗?

为什么要先注册监听器,然后在node.js中调用emit方法??can';我们不能颠倒顺序,仍然可以工作吗?,node.js,Node.js,为什么侦听器的顺序应该在发射器的顶部 const EventEmitter=require('events'); const emitter=new EventEmitter(); //Register a Listener emitter.on('messageLogged',function(){ console.log('Listener Called'); }) //Raise an event emitt

为什么侦听器的顺序应该在发射器的顶部

const EventEmitter=require('events');
const emitter=new EventEmitter();
   
 //Register a Listener
    
      emitter.on('messageLogged',function(){
        console.log('Listener Called');
        })
//Raise an event
    
    emitter.emit('messageLogged');

因为在发出事件之前,需要订阅事件的侦听器


其思想是,当您调用
emit
时,它将调用附加到事件的函数。如果没有函数,它将什么也不调用。您不能为您当前发出的事件调用将来附加的函数。

因此,当我们调用发出时,它将查找我们附加的函数,对吗?那么,如果在调用emit之后注册了侦听器呢??不发出注册侦听器的代码吗??你的意思是只看上面?感谢您的回复:)是的,它将只调用您通过
on
call附带的函数。它看起来不在上面。它只使用您附加的函数。这取决于时间,这是一个
何时
调用
发出
的问题,而不是
在您的代码中
调用它的位置。您上次的评论把我搞糊涂了。我知道emit将查找它的事件注册或附加的函数!但我在质疑这里的秩序。你是说秩序不重要吗??所以,即使在调用emit之后,也可以注册侦听器??我对你最后的评论感到有点困惑,因为你的话“这取决于时间,这是一个何时调用emit的问题,而不是代码中的什么地方”非常感谢你的回答:)时间顺序很重要。在您的示例中,您需要调用
emit
after
on
调用,因为它是同步代码。如果是
async
code,则代码中的顺序可能与在时间线上调用它的顺序不同,例如,setTimeout(…,50)将在setTimeout(…,100)之前被调用。在调用emit之后,可以注册侦听器,但它不会接收过去的事件。它将在下一次
emit
调用中被调用。这有用吗?非常感谢你的帮助!是的,它确实有用!如果你能解释一下为什么你会问这个问题,这将有助于找到正确的答案。也许是因为你认为顺序不重要?如果是,为什么?你正在做一些需要在订阅/收听之前发出事件的事情吗?@roychri嗨,不,我没有做任何事情。我只是在学习node,遇到了events模块,并一直在问这样一个问题:“为什么订单在这里很重要,而事件发起人和监听者都在同一个模块上?”。