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

Я пробовал цепные обещания и другие средства, но просто не могу заставить его работать. Вполне возможно, это сводится к моей неопытности в отношении обещаний, поэтому любая помощь будет принята с благодарностью.

Ответы на вопрос(2)

Ваш ответ на вопрос