Угловая синхронная петля http для обновления индикатора выполнения

я пытаюсь обновить индикатор выполнения с помощью последовательного http-запроса внутри foreach, это работает, но это 'не синхронизирован по завершению, индикатор выполнения синхронизируется 'd по вызову http, что я делаю не так?

angular.forEach(queue, function (item) {
    if (item.uid) {
        d.item = item;
        $http({
            url: BASE_URL + 'upp', 
            method: 'post',
            data: d                  
        }).then(function(res){
            x++;
            update_progress((x/queue_count)*100);
        });
    }
});

Я хотел бы вызвать функцию update_progress только тогда, когда http вернется как завершенный (200 OK), поэтому индикатор выполнения правильно показывает фактический прогресс. Спасибо!

Редактировать:

Я попытался проверить состояние ответа, прежде чем вызывать функцию * update_progress *, и она все еще не работает, как ожидалось. Я не былt известно, что 200 было отправлено до завершения запроса: | По логикеРез объект не долженбытьответ http запроса? Я имею в виду, если этоs 200, а не код ошибки, который не долженозначает, что запрос был выполнен?

angular.forEach(queue, function (item) {
if (item.uid) {
    d.item = item;
    $http({
        url: BASE_URL + 'upp', 
        method: 'post',
        data: d                  
    }).then(function(res){
        if(res.status == 200) {
          x++;
          update_progress((x/queue_count)*100);
        }
    });
}

Читая больше об обещаниях atm, чтобы увидеть, смогу ли я заставить это работать, как заявлено @ josh -ird

Изменить 2:

Таким образом, обещания были способом сделать это, все запросы отправляются последовательно, поэтому индикатор выполнения работает, как и ожидалось, здесь »s код:

var promise = $q.all({}); 
// Had to init $q.all with an empty obj, 'cause null was trowing errors

angular.forEach(queue, function(item){
  if (item.uid) {        
    promise = promise.then(function(){
      d.item = item;
      return $http({
        url: BASE_URL + 'upp', 
        method: 'post',
        data: d 
      }).then(function(res){
        x++;
        update_progress((x/queue_count)*100);
      });
    });
  }
});

promise.then(function(){
  end_js_update();
});

Спасибо @ josh-странный

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

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