在使用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));
}
答案 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);
}