node.js - 异步队列永远不会随机触发耗尽

标签 node.js queue

我将继续使用 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。

然而,有时 drain 事件永远不会被触发,但应用程序完成并返回 shell,没有任何异常。 我在几个小时内检查了我的代码,看看是否缺少回调,但似乎没有。

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

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

我花了几个晚上试图找出原因,所以如果你们有任何想法,我们将非常欢迎。

最佳答案

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

此工具可以帮助您找到它: https://github.com/mafintosh/why-is-node-running

我很确定您的问题可能属于 methodDoingVariousAsynchronousStuff() 中的某些内容 - async.queue 代码看起来几乎没问题。

可能是未调用的回调、未处理的错误或打开的网络连接。

关于node.js - 异步队列永远不会随机触发耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36859634/

相关文章:

javascript - 异步函数返回 Promise <Pending>

javascript - JavaScript 中的 HTML 和 CSS 到 PDF

java - 我的队列(链接列表)中的空指针

java - 使用队列中的对象中的方法,Java

node.js - 如何为nodejs安装win32ole(即使node-gyp正常工作)

node.js - 尝试在一组包上执行 lerna run --parallel

node.js - nodejs - writeFile 创建空文件

java - 关于 LinkedBlockingQueue,需要澄清

c++ - std::queue 初始化为 NULL

c++ - 包含 std::queue 的类的值初始化