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

Node - Async waterfall with in a for loop

我在使用 for 循环时无法理解 async.waterfall

所以我正在使用以下瀑布:

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

使用以下 3 种方法。

但是我面临的问题是 countVertices 中的结果不准确,即有时应该是 2,有时应该是 1,而它应该总是显示 2。

这让我相信来自 addVertices 的回调在 for 循环完成后实际上并没有被调用。

谁能帮忙 - 当 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));
}

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

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