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.

questionAnswers(2)

yourAnswerToTheQuestion