AngularJS promete secuencialmente la cadena en bucles forEach

He estado haciendo muchas búsquedas tratando de encontrar una solución, y creo que finalmente se reduce la promesa a medida que se devuelven mis datos, pero todo al final, donde lo necesito a través de cada iteración.

Tengo el vm.planWeek.dinner que recorro cada fila, y agrego 'menuType' y la matriz 'trackMenuIds', que luego uso en mi llamada MongoDB para criterios de búsqueda. Todo esto funciona bien, pero el elemento clave es que con cada llamada de fábrica devuelta, agrego la identificación del artículo devuelto a la matriz 'trackMenuIds'. La razón de esto es que crea una serie de elementos que ya he devuelto, por lo que pueden ignorarse en la próxima llamada, es decir, a través de $ 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);
          });
     });
};

Cuando agrego la matriz 'trackMenuIds' a la fila actual, no se ha actualizado con ninguna identificación. Cuando lo consuelo, puedo ver que de hecho los agrega, pero creo que es parte de una promesa, no lo está haciendo lo suficientemente pronto como para pasar la matriz actualizada a mi llamada de fábrica en cada iteración.

He intentado promesas en cadena y otros medios, pero parece que no puedo hacer que funcione. Muy posiblemente se deba a mi inexperiencia de las promesas, por lo que cualquier ayuda sería muy apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta