@ Andrew результат может быть таким же, но способ, которым я использую, отличается. С ручным циклом вы не знаете, когда обещание будет выполнено, и, скажем, цикл уже на следующей итерации, вы пропустите текущее значение обещания.
го занимался поиском, пытаясь найти решение, и считаю, что оно в конечном итоге сводится к обещанию, когда мои данные возвращаются, но все в конце, где, как мне это нужно, на каждой итерации.
У меня есть 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 к текущей строке, он не обновляется ни с одним идентификатором. Когда я утешаю его, я вижу, что он действительно добавляет их, но, как полагают, является частью обещания, он делает это недостаточно рано, чтобы передавать обновленный массив в мой вызов фабрики на каждой итерации.
Я пробовал цепные обещания и другие средства, но просто не могу заставить его работать. Вполне возможно, это сводится к моей неопытности в отношении обещаний, поэтому любая помощь будет принята с благодарностью.