Заполните массив датами, когда запросы $ http / rest не возвращали ответ

0

Я хочу выполнить запрос http/rest в течение 30 дней и заполнить массив датами, которые не вернули ответ. Каков хороший способ сделать это? Я не очень хорошо разбираюсь в этом и считаю его запутанным из-за асинхронного характера запросов http/rest.

Приведенный ниже код работает, но он сохраняет последние сообщения. Я хочу сохранить последние незарегистрированные.

        $scope.recentReported = [];

        $scope.getRecentReported = function () {
          var dateToday = new Date();
          for (i = 0; i < $scope.recentDateLength; i++) {
            var dateThen = moment(dateToday).add(-i, 'days');
            RestRequestsSrvc.getRevenue(dateThen)
              .then(
                function (response) {
                  if (response) {
                    $scope.recentReported.push(response.date);
                  }
                }
              );
          }
        };
  • 0
    Почему ваш RestRequestsSrvc.getRevenue не разрешает обещание для незарегистрированного? Это кажется плохой идеей. Вместо этого пусть он отклонит обещание или вернет код ошибки.
  • 0
    Я согласен, что это не идеально, но я ничего не могу сделать с бэк-эндом прямо сейчас.
Теги:
rest
http

1 ответ

0

Чтобы получить эту работу, вам нужно использовать $ q и связать свои $ http-звонки. Сначала получите массив с датами:

  var dates = [];
  for (i = 0; i < $scope.recentDateLength; i++) {
    dates.push(moment(dateToday).add(-i, 'days'));
  }

Затем соедините свои вызовы так:

$q.all(dates.map(function(dateThen){
  return RestRequestsSrvc.getRevenue(dateThen);  
})).then(function(results){
  //results now contains some null values for the responses that did not return any value
  results.forEach(function(result, resultIndex){
    if(!result){
      $scope.recentUnReported.push(//your fill up here);
    };
  });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню