asynchronous队列永远不会随机触发

你好,StackOverflow社区,

我正在继续玩nodejs。 所以下面是我的launch.js应用程序的简要总结

var counter = 0; var queue = async.queue(function(objectWithVariousProperties, callback) { methodDoingVariousAsynchronousStuff(objectWithVariousProperties.link, function(err,result) counter++; callback(); }); }, 20); queue.drain = function() { log.debug("Finished Queue", { "Objects processed" : counter }); }; //TO various iterations over several array and construct some object and then push them in the queue via queue.push(media_object) 

我的问题是,80%的过程工作的时间。 应用程序通过shell命令nodejs launch.js启动,处理队列,当队列结束时显示'Finished Queue'然后返回到shell。

但是,有时候,排水事件从来没有被触发,但是应用程序完成并返回到shell,没有任何exception。 我在几个小时内检查了我的代码,发现是否有一个缺less的callback,但似乎并不如此。

任何想法可以解释这种奇怪的随机行为? 或者任何有助于查找泄漏代码的工具?

正如我所说的,有时,队列处理超过10000个对象没有任何问题,有时当我启动时,它不会触发排水事件,但过程停止(再次没有任何exception或错误或任何东西,只是一个正常的停止)

我花了几个晚上试图弄清楚为什么,所以如果你们有什么想法,我们会很乐意的。

预先感谢您的反馈意见,我祝你有一个愉快的一天,

安塞尔姆

我不能给你一个合适的答案,而是帮助你debugging你的代码。 当node.js不存在时,事件循环中还有一些东西。

这个工具可以帮助你find它: https : //github.com/mafintosh/why-is-node-running

我很确定你的问题可能属于methodDoingVariousAsynchronousStuff()东西 – async.queue代码看起来几乎没有问题。

也许像一个未调用的callback,未处理的错误或开放的networking连接。

正如我所看到的,你不会发现一些错误。 你可以添加到你的代码:

 process.on('uncaughtException', function(error) { console.log(error); }); 

我希望这会帮助你find问题。 更多信息你可以阅读文档 。