Node JS中的Event Loop和EventEmitter

时间:2016-08-09 22:18:40

标签: javascript node.js eventemitter event-loop

我已经写了一些基本的Nodejs代码,其中有

  1. 带有myFunction
  2. 的递归函数process.nextTick()
  3. 长时间循环播放
  4. 两个块都是发射事件,代码如下

    var EventEmitter = require('events').EventEmitter;
    var emitter = new EventEmitter();
    var counter = 1;
    
    emitter.on('message',
        (message)=>
            {
                console.log('Hey I have got this message ' +message);
            }
        );
    
    emitter.on('syncMsg',
        (message)=>
            {
                console.log('voila the sync message is  ' +message);
            }
        );
    
    function myFunction(){
        process.nextTick(
        ()=>
        {
            emitter.emit('message','message'+counter);
            counter++;
            myFunction();
        }
        )
    }
    
    myFunction();
    
    for(var i=0;i<10000;i++)
    {
        emitter.emit('syncMsg','syncMsg'+counter);
        counter++;
    }
    

    现在,在执行文件时,即使为syncMsg事件发出单个事件,也会同步触发message事件的侦听器。为什么执行同步?

1 个答案:

答案 0 :(得分:0)

message事件只会在事件循环的下一个时钟点发出,这发生在 之后 for循环(立即发出事件)完成,当前的勾号没有什么可做的。