Я много искал, пытаясь найти решение, и считаю, что это в конечном итоге сводится к обещанию, поскольку мои данные возвращаются, но все в конце, где, когда мне это нужно, каждый итерация.AngularJS Sequential Chain Promises in forEach Loops
У меня есть vm.planWeek.dinner, что я прокручиваю каждую строку и добавляю к нему 'menuType' и массив 'trackMenuIds', который затем я использую в своем вызове MongoDB для поиска. Все это работает отлично, но ключевым элементом является возврат каждого заводского вызова, я добавляю идентификатор возвращенного элемента в массив 'trackMenuIds'. Причина этого заключается в том, что он создает массив элементов, которые я уже вернул, поэтому они могут игнорироваться при следующем вызове, то есть через $ nin.
vm.reviewWeek = function() {
//Array to be updated over each iteration and used in factory call
var trackMenuIds = [];
angular.forEach(vm.planWeek.dinner, function (day) {
//Adds two more items to day(current row) to pass to factory
day.menuType = 'dinner';
day.weekIds = trackMenuIds;
//Factory call - each time this runs, the 'trackMenuIds' array should have
//one more item added from the previous run
menuFactory.matchMenuCriteria(day)
.then(function (response) {
var randomItem = response.data[0];
day.menuItem = {'_id': randomItem._id, 'name': randomItem.name};
//adds the current id to the array to be used for the next run
trackMenuIds.push(randomItem._id);
});
});
};
Когда я добавляю массив «trackMenuIds» в текущей строке, он не был обновлен с любыми идентификаторами. Когда я утешаю его, я вижу, что он действительно добавляет их, но, полагая, что это часть обещания, он не делает этого достаточно рано, чтобы передать обновленный массив в мой заводский вызов на каждой итерации.
Я пробовал цепи обещаний и других средств, но просто не могу заставить его работать. Вполне возможно, что это сводится к моей неопытности обещаний, поэтому любая помощь будет очень признательна.
Возможный дубликат [Закрытие внутренних циклов JavaScript - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Phil