我在for循环中有一个异步函数嵌套在另一个for循环中。
// recipesArray is an array of arrays of objects
// recipeObject is an array of objects
// currentRecipe is an object
connectToDb(function(){
// LOOP 1
for (var i=0, l=recipesArray.length; i < l; i++) {
// recipeObject is an
var recipeObject = recipesArray[i];
// LOOP 2
for (var x=0, y=recipeObject.length; x < y; x++) {
var currentRecipe = recipeObject[x];
// this is an asynchronous function
checkRecipe(currentRecipe, function (theRecipe) {
if (theRecipe === undefined) {
console.log('RECIPE NOT FOUND');
} else {
console.log('RECIPE FOUND', theRecipe);
}
});
}
}
});
我需要根据checkRecipe函数的结果将数据添加到recipesArray。
我一直在尝试不同的事情...... - 我试着跟踪i和x ...... - 我尝试多次回调...... - 我甚至需要做所有这些,还是有其他方式......
我也尝试过为节点使用异步库(实际上对其他情况非常有帮助),但forEach不接受对象(只有一个数组)。
卡住。
任何建议都将不胜感激。
答案 0 :(得分:2)
假设checkRecipe()
可以并行运行而没有限制,以下是您使用async.each()
的方式:
connectToDb(function() {
async.each(recipesArray, function(subArray, callback) {
async.each(subArray, function(currentRecipe, callback2) {
checkRecipe(currentRecipe, function(theRecipe) {
if (theRecipe === undefined)
return callback2(new Error('Recipe not found'));
callback2();
});
}, callback);
}, function(err) {
if (err)
return console.error('Error: ' + err);
// success, all recipes found
});
});