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