节点 - 在for循环中的异步瀑布

时间:2018-05-08 03:42:56

标签: node.js azure gremlin async.js

在使用for循环时,我遇到了解async.waterfall的问题:

所以我使用以下瀑布:

async.waterfall([
    addVertices,
    countVertices
], finish);

使用以下3种方法。

然而,我所面临的问题是countVertices的结果不准确,有时应该是2,有时是1,当它应该总是显示为2.

这让我相信一旦for循环完成,就不会实际调用来自addVertices的回调。

任何人都可以提供帮助 - 当for循环到达最后一次迭代时调用回调是错误的吗?

function addVertices(callback) {
    for (var x = 0; x < pData.length; x++) {

        client.execute("g.addV(‘test’).property(‘id’, \"" + pData.id + "\")", { }, (err, results) => {
            if (err) {
                return callback(console.error(err));
            }
        });

        if (x == pData.length-1 ){
            callback(null)
        }

    }

}


function countVertices(callback)
{
    console.log('Running Count');
    client.execute("g.V().count()", { }, (err, results) => {
    if (err) {
        return callback(console.error(err));
    }

    console.log("Result: %s\n", JSON.stringify(results));
    callback(null)
});
}


function finish(err, result)
{
    if (err) {
        return console.error(err);
    }
    console.log("Finished");
    console.log('Press any key to exit');

    process.stdin.setRawMode(true);
    process.stdin.resume();
    process.stdin.on('data', process.exit.bind(process, 0));
}

1 个答案:

答案 0 :(得分:1)

问题出在addVertices中。您可以通过将as语句替换为async.forEach

来解决此问题
function addVertices(outercallback) {
    async.forEach(pData, function (data, innercallback) {
      client.execute("g.addV('test').property('id', \"" + data.id + "\")", { }, innercallback);
    }, outercallback);
}