Underscore _.each回调完成后?

时间:2013-09-16 15:22:30

标签: javascript underscore.js

当下划线完成它的_.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.

2 个答案:

答案 0 :(得分:21)

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");
    }
});

答案 1 :(得分:10)

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

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

编辑添加:

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