Promessas sequenciais em cadeia do AngularJS em forEach Loops
Venho pesquisando muitas vezes tentando encontrar uma solução e acredito que ela finalmente cumpre a promessa, pois meus dados são retornados, mas todos no final, onde é necessário em cada iteração.
Eu tenho o vm.planWeek.dinner que percorre cada linha e anexo 'menuType' e a matriz 'trackMenuIds' a ele, que eu uso na minha chamada do MongoDB para critérios de pesquisa. Isso tudo funciona bem, mas o elemento chave é que, a cada chamada de fábrica retornada, eu adiciono o ID do item retornado à matriz 'trackMenuIds'. A razão para isso é que ele cria uma série de itens que eu já retornei, para que eles possam ser ignorados na próxima chamada, ou seja, via $ 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);
});
});
};
Quando anexo a matriz 'trackMenuIds' à linha atual, ela não foi atualizada com nenhum ID. Quando eu o console, percebo que ele realmente os adiciona, mas acredito que como parte de uma promessa, ele não está fazendo isso cedo o suficiente para passar a matriz atualizada para minha chamada de fábrica a cada iteração.
Eu tentei promessas em cadeia e outros meios, mas simplesmente não consigo fazê-lo funcionar. Possivelmente, tudo se resume à minha inexperiência de promessas, então qualquer ajuda seria muito apreciada.