节点JS过早的程序结束

时间:2012-02-09 02:22:40

标签: javascript node.js asynchronous

我调用一个函数来堆叠两个异步调用,并在两个异步调用完成时调用回调。
我使用一种非常简单的方法来跟踪未完成的调用

lock ++
lock--

问题是程序在两个函数的操作完成之前退出。我注意到这是我在调试时遇到的问题,并在退出之前完成了处理时间。

如何解决这个问题? (目前我对如何准确解释我的问题感到有点失落,请问我需要的任何内容,以便澄清问题)

----- EDIT

使用下面的脚本为什么当我运行它时它会退出?我以为通过调用我正在注册事件que并且脚本应该继续运行?

var events  = require('events');
var eventEmitter = new events.EventEmitter();

eventEmitter.on('spo',function(){
console.log('spo');
});

2 个答案:

答案 0 :(得分:0)

问题是您设置了一个事件发射器并将处理程序附加到“spo”事件,然后您不执行任何其他操作。所以节点运行时看到没有什么可以做和退出。试试这个:

eventEmitter.on('spo', function() {
  console.log('OK: got event "spo"');
});
eventEmitter.emit('spo');

答案 1 :(得分:0)

COMING From a Git Hub thread.

  

使事件循环保持活动状态的是脚本没有的句柄(套接字,定时器等)。

     

EventEmitter实例是同步的 - 也就是说,它们会立即运行    - 所以在你的例子中,一旦事件被触发,脚本就完成了。

     

可以这样想:EventEmitter本身并没有用,只是它   当它与发出有趣的东西联系在一起时变得有用   事件(来自网络或文件系统的数据,一个计时器)   到期等等。)。

我认为他们所说的是,它是Node之外的句柄,可以打开脚本。