Подчеркивать _.each callback, когда закончите?
Есть ли обратный вызов для того, когда подчеркивание завершено, цикл _.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.
Ответы
Ответ 1
Функция each
в UnderscoreJS является синхронной, которая не требует обратного вызова, когда она будет завершена. Выполняется выполнение команд, следующих за циклом.
Если вы выполняете операции async в своем цикле, я бы рекомендовал использовать библиотеку, поддерживающую асинхронные операции в каждой функции. Одна из возможностей заключается в использовании 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");
}
});
Ответ 2
Другой вариант - создать функцию обратного вызова в каждом цикле при последнем выполнении:
_.each(collection, function(model) {
if(model.collection.indexOf(model) + 1 == collection.length) {
// Callback goes here
}
});
Изменить для добавления:
Я не знаю, как выглядят ваши данные ввода/вывода, но вместо этого вы можете использовать _.map
, если вы просто преобразуете/переупорядочиваете содержимое