Node.js 使用 async.forEach - 如何将列表传递给最终函数
Node.js using async.forEach - how to pass a list to the final function
我正在使用节点异步库 - https://github.com/caolan/async#forEach 并想遍历一个数组 (arrayOne),将结果推送到另一个 (productList),然后将该数组传递给最终函数。但是打印结果是一个空数组。
function Async(callback) {
var productList = [];
async.forEach(
arrayOne,
function(item, callback){
getClientsNb({id:item["row"][0]},function (result) {
productList.push(result)
});
callback();
},
function(err) {
console.log(productList);
}
);
}
"getCLientsNb" 函数是对 Neo4j 数据库的调用。
我想明白为什么结果是一个空数组。由于我是node.js的初学者,请您的回答非常清楚:)
你的问题是你把回调放在哪里。
function(item, callback)
{ getClientsNb({id:item["row"][0]},function
(result) { productList.push(result) });
callback(); }
执行 getClientsNb() 回调之前的外部函数 returns,因此您永远不会建立列表。您需要在该函数内移动回调:
function(item, callback){ getClientsNb({id:item["row"][0]},
function (result) {
productList.push(result)
callback()});
}
如果您使用 async.map 而不是 forEach,那么您就不需要创建 productList。只需将第二个参数中的结果传递给回调,它将作为第二个参数传递给最终函数。
我正在使用节点异步库 - https://github.com/caolan/async#forEach 并想遍历一个数组 (arrayOne),将结果推送到另一个 (productList),然后将该数组传递给最终函数。但是打印结果是一个空数组。
function Async(callback) {
var productList = [];
async.forEach(
arrayOne,
function(item, callback){
getClientsNb({id:item["row"][0]},function (result) {
productList.push(result)
});
callback();
},
function(err) {
console.log(productList);
}
);
}
"getCLientsNb" 函数是对 Neo4j 数据库的调用。
我想明白为什么结果是一个空数组。由于我是node.js的初学者,请您的回答非常清楚:)
你的问题是你把回调放在哪里。
function(item, callback)
{ getClientsNb({id:item["row"][0]},function
(result) { productList.push(result) });
callback(); }
执行 getClientsNb() 回调之前的外部函数 returns,因此您永远不会建立列表。您需要在该函数内移动回调:
function(item, callback){ getClientsNb({id:item["row"][0]},
function (result) {
productList.push(result)
callback()});
}
如果您使用 async.map 而不是 forEach,那么您就不需要创建 productList。只需将第二个参数中的结果传递给回调,它将作为第二个参数传递给最终函数。