下划线完成时是否存在回调,所以它是_.each循环,因为如果此后立即我console log显然我在每个循环中填充的数组不可用。这来自嵌套的_.each循环。

_.each(data.recipe, function(recipeItem) {
    var recipeMap = that.get('recipeMap');
    recipeMap[recipeItem.id] = { id: recipeItem.id, quantity: recipeItem.quantity };
});
console.log(that.get('recipeMap')); //not ready yet.

最佳答案

UnderscoreJS中的each函数是同步的,完成后不需要回调。一种是在循环之后立即执行命令。

如果您要在循环中执行异步操作,建议您在每个函数中使用支持异步操作的库。一种可能性是使用AsyncJS

这是您的循环翻译为AsyncJS:

async.each(data.recipe, function(recipeItem, callback) {
    var recipeMap = that.get('recipeMap');
    recipeMap[recipeItem.id] = { id: recipeItem.id, quantity: recipeItem.quantity };
    callback(); // show that no errors happened
}, function(err) {
    if(err) {
        console.log("There was an error" + err);
    } else {
        console.log("Loop is done");
    }
});

07-24 14:20