节点 - 在 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);
}
我在使用 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);
}