Подчеркивать _.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, если вы просто преобразуете/переупорядочиваете содержимое