$ q.all - 解决某些请求的http请求错误,但不解决其他请求

时间:2016-11-14 07:29:20

标签: javascript angularjs

我有一些看起来像这样的代码

angular.forEach(config.tvshows.shows, function(show) {
      promises.push($http.get('http://epguides.frecar.no/show/' + show.replace(/\s|\./g, '') + '/next/'));
  });

  return $q.all(promises).then(function(response) {
        for (var i = 0; i < response.length; i++) {
           service.shows.push(response[i]);
        }
  });
};

我的想法是我有一个由http请求组成的列表(promises)。大多数都是成功的,但有些可能会失败。我不能简单地删除失败的请求,因为它们有时会成功,而有时会失败。

但是,如果其中一个回复失败,我不会将任何回复推送到&#39; service.shows&#39;。有没有办法处理404或http请求上的任何错误响应,以便为工作请求代码正常运行?

1 个答案:

答案 0 :(得分:4)

您可以将自定义处理程序添加到失败的http请求中,如下所示:

angular.forEach(config.tvshows.shows, function(show) {
      promises.push($http.get('http://epg\./g, ') + '/next/').catch(function() {
    // return whatever is needed here
}));

  });

这样,如果响应失败,您可以返回您的预设响应,$ q.all链将不会停止。如果响应没有失败,您将获得服务器发送的响应。