为什么'nextTick'在这里没有按照预期行事?

下面的程序将挂在NodeJS中,有人知道为什么吗?

结束=假;

 events = require('events');
 eventEmitter = new events.EventEmitter();
 eventEmitter.on('end',function(){
  结束=真实;
 });
 setTimeout(function(){
   eventEmitter.emit( '结束');
 },100);

 while(!ended){
   process.nextTick();
 }

的console.log( '结束');

nextTick并不是某种产量操作,它是为了在下次引擎可以自由地调用时调用callback。 它是“挂起”的,因为while循环的退出条件永远不会满足(并且永远不可能)。

简单的回答:因为Node.JS是单线程的。

长的答案:JavaScript被组织成一个持有事件的队列。 这些事件发射之前,他们不能停止,直到他们完成工作。 也没有其他的代码可以并行运行,因为Node.JS 单线程的。 这意味着这个代码:

 while (!ended) { process.nextTick(); } 

是一个无限循环。 endedvariables将永远不会改变,因为end处理程序不能触发,直到主事件(即您所显示的代码)完成其工作。 而它从来没有。

process.nextTick(); 不调用主循环的下一个循环,下一个循环自动出现, .nextTick()方法用于在下一个循环调用一个callback函数info: http : //nodejs.org/api/process.html# process_process_nexttick_callback 。

while(!ended)是一个无限循环,这就是为什么应用程序挂起, endedvariables不会改变,直到当前的循环没有结束,这是你的while循环充斥。