【问题标题】:Node Async - Callback was already called - using 2 for loops and an if statement节点异步 - 回调已被调用 - 使用 2 个 for 循环和一个 if 语句
【发布时间】:2018-05-14 10:27:15
【问题描述】:

谁能解释我为什么一直看到Error: Callback was already called

我觉得我已经涵盖了所有案例 - 那为什么会被“已经调用”:

function addVertices(outercallback) {

    async.forEachLimit(fullData, 25, function (data, innercallback) {

        myJson.matches.forEach(function (oMatches) {
            if (data.$.id == oMatches.SourceId) {

                oMatches.Ids.forEach(function (oId) {

                    client.execute("g.addV('test').property('id', \"" + oId + "\")", {}, (err, results) => {
                        if (err) {
                            return innercallback(console.error(err));
                        }

                        innercallback(null)
                    });

                })

            } 

        })

    }, outercallback);

}

事实上,我也尝试将第二个 forEach 替换为 async.ForEach,如下所示,但是这是正确的方法吗?:

function addVertices(outercallback) {

    async.forEachLimit(fullData, 25, function (data, innercallback) {

        async.forEach(myJson, function (oMatches, innercallback2) {
            if (data.$.id == oMatches.SourceId) {

                oMatches.Ids.forEach(function (oId) {

                    client.execute("g.addV('test').property('id', \"" + oId + "\")", {}, (err, results) => {
                        if (err) {
                            return innercallback2(console.error(err));
                        }

                        innercallback2(null)
                    });

                })

            } 
            innercallback(null)

        })

    }, outercallback);

}

【问题讨论】:

    标签: azure azure-cosmosdb gremlin async.js


    【解决方案1】:

    那不是if的问题。

    但是因为在async.forEachLimit 的每次迭代中,innercallback 都会在myJson.matches.forEach(...) 中被调用,因为myJson.matches 可能不止一项。

    您的第二个代码块中存在同样的问题。
    在内部async.forEach中,innercallback2oMatches.Ids.forEach中被调用,也可以被多次调用。

    因此,当您对innercallback 的第二次调用(或任何后续调用)发生时,Error: Callback was already called 会被争论。

    我已经用Promise#all 更新了解决方案,以确保innercallbackyour original post 中的调用。 请参阅 Updated (2018.05.14) 部分和代码块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-11
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      • 2018-09-14
      • 1970-01-01
      • 2012-11-03
      相关资源
      最近更新 更多