【发布时间】:2014-04-28 01:52:41
【问题描述】:
我有一个嵌套在另一个 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... - 我是否尝试有多个回调... - 我什至需要做所有这些,还是有其他方法....
我也尝试使用 node 的异步库(实际上在其他情况下非常有帮助),但是 forEach 不接受对象(只有一个数组)。
卡住了。
任何建议将不胜感激。
【问题讨论】:
-
你说
forEach只适用于数组,但你只有数组?或者至少recipesArray和recipeObject看起来都非常像数组。 -
嗯,那些对象作为参数传递给你的回调函数?也许向我们展示您尝试过的代码。
-
如果我将这样的内容传递给 async.forEach: [{ color: red, size: med }] 我将无法访问每个函数中的颜色和大小。
-
@Bergi,我认为这是我遇到的问题:github.com/caolan/async/issues/26
-
尽量不要“编辑”原始对象,而是使用
map而不是each。是的,当您使用回调时,i和x会自动为您保留在闭包中。
标签: javascript node.js for-loop async.js