我继续玩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启动应用程序,处理队列,当队列完成时,它会显示“完成队列”'然后回到贝壳。
但是,有时排水事件从未被触发,但应用程序已完成并返回到shell而没有任何异常。 我在几个小时内检查了我的代码,发现是否有丢失的回调,但似乎不是这样。
任何可以解释这种奇怪的随机行为的想法? 或者任何有助于找到泄漏代码的工具?
正如我所说,有时,队列处理超过10000个对象没有任何问题,有时当我启动它时,它只是不会触发排水事件但是过程停止(再次没有任何异常或错误或任何事情,只是一个正常停止)
我花了几个晚上试图找出原因,所以如果你们有任何想法,我们将很乐意欢迎你。
答案 0 :(得分:3)
我无法给您一个合适的答案,但可以帮助您调试代码。当node.js没有退出时,事件循环中还剩下一些东西。
此工具可帮助您找到它: https://github.com/mafintosh/why-is-node-running
我很确定您的问题可能属于methodDoingVariousAsynchronousStuff()
中的内容 - async.queue
代码看起来几乎没问题。
可能类似于未调用的回调,未处理的错误或开放的网络连接。
答案 1 :(得分:2)
正如我所见,你不会发现一些错误。你能加入你的代码吗?
process.on('uncaughtException', function(error) {
console.log(error);
});
我希望它可以帮助您找到问题所在。您可以在doc。
中阅读更多信息