16

下划线完成时是否有回调,它是_.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.
4

2 回答 2

22

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");
    }
});
于 2013-09-16T17:35:07.937 回答
9

另一种选择是在最后一次执行时将回调函数构建到每个循环中:

_.each(collection, function(model) {
    if(model.collection.indexOf(model) + 1 == collection.length) {
         // Callback goes here
    }
});

编辑添加:

_.map我不知道您的输入/输出数据是什么样的,但如果您只是转换/重新排列内容,您可以考虑改用

于 2014-11-24T15:56:19.817 回答