javascript - Node.js 和异步错误

标签 javascript node.js async.js

我的 Node.js 应用程序结构如下:

async.forever(
function(callback) {
    async.series([
        function(callback) {
            SomeFunction1(function(err, results) {
                if (err) callback(err);
                callback(null, results);
            });
        },
        function(callback) {
            SomeFunction2(function(err, results) {
                if (err) callback(err);
                callback(null, results);
            });
        },
        function(callback) {
            SomeFunction3(function(err, results) {
                if (err) callback(err);
                callback(null, results);
            });
        },      
        ],
        function(err, results) {
            if (err) console.log(err);
            setTimeout(callback, 30000);
        });
},
function(err) {}
);

async.forever 循环中应该有 30 秒的暂停,并且函数 SomeFunction1、SomeFunction2 和 SomeFunction3 每个周期只能串行执行一次。

它可以正常工作一段时间,但在一段时间(有时是几天)之后,async.series 中的函数(SomeFunction1、SomeFunction2 和 SomeFunction3)开始在每个 async.forever 周期运行多次。 日志显示每个函数运行 3 次,间隔几毫秒。

我没有从 Node 收到任何错误。

任何帮助将不胜感激。

最佳答案

the functions starts to run multiple time per async.forever cycle

我唯一能想到的是你有多次调用回调的函数。 async.js 不关心这一点,并且很乐意触发多个周期并行运行。

解决此类问题的一个好主意是使用 Promise。他们的签约人是the spec仅触发一次回调,并防止多次解析它们。

关于javascript - Node.js 和异步错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24073132/

相关文章:

javascript - 为什么这个索引签名不能是可选的?

javascript - 如何使用 puppeteer、headless chrome 屏蔽广告

mysql - Sequelize : Concat fields in WHERE LIKE clause

javascript - Nodejs 异步编程 - 为什么需要 "async"模块?什么是 "Callback Hell"/"Pyramid of Doom"?

javascript - 如何从 javascript 或 Jquery 端检查 ViewData 变量是否过期

javascript - 可观察属性更改时的 Angular2 触发函数

Node.js spawn() 调用在 Windows 上不起作用

node.js - Electron - 将程序信息传递给 Windows Media 音量控制覆盖层

javascript - Bluebird Promise 和 async.forEach 迭代

javascript - React Native fetch 仅在第二次或第三次尝试时返回