我正在使用$http.get()
获取一些图片。我正在使用$q.all()
呼叫他们,但是如果一个呼叫/保证失败,他们都会这样做。还有另一种方法吗?
$q.all([$http.get('..'),$http.get('..')]).then(function(res) {
// this will never happen if one get fails.
}
答案 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 强>