与Angular 1.x并行运行Promise而不会因为失败而停止

时间:2016-06-11 23:26:39

标签: angularjs

我正在使用$http.get()获取一些图片。我正在使用$q.all()呼叫他们,但是如果一个呼叫/保证失败,他们都会这样做。还有另一种方法吗?

$q.all([$http.get('..'),$http.get('..')]).then(function(res) {
  // this will never happen if one get fails.
}

1 个答案:

答案 0 :(得分:3)

使用catch()

进行简单的概念验证
var req1 =  $http.get('..').catch(function(err){ return err; });
var req2 =  $http.get('..').catch(function(err){ return err; });

$q.all([req1,req2]).then(function(results) {
     var counts = {pass:0, fail:0}
     results.forEach(function(item){
       var type = item.status === 200 ? 'pass':'fail';
       counts[type]++;
     });
     alert('Results status =' + JSON.stringify(counts))
});

因为你从catch返回一些东西它会解析初始的promise并将这个返回传递给promise链(在这种情况下是结果数组)。

$q.all().then的成功回调将作为结果触发

DEMO