是否可以继续forkjoin http.get请求,即使其中一个请求失败也是如此。
我期待在angular2中使用$ q.allSettled的类似功能。
参见示例:http://jsfiddle.net/Zenuka/pHEf9/
angular.module('qAllSettled', []).config(function($provide) {
$provide.decorator('$q', function($delegate) {
var $q = $delegate;
$q.allSettled = function(promises) {
return $q.all(promises.map(function(promise) {
return promise.then(function(value) {
return { state: 'fulfilled', value: value };
}, function(reason) {
return { state: 'rejected', reason: reason };
});
}));
};
return $q;
});
});
KAB
答案 0 :(得分:31)
您可以利用每个observable的catch
运算符来拦截错误,并在这种情况下返回另一个observable。
以下是一个示例:
return Observable.forkJoin(
this.http.get('/some-url')
.map((res:Response) => res.json())
.catch(res:Response => Observable.of({}),
this.http.get('/some-other-url')
.map((res:Response) => res.json())
.catch(res:Response => Observable.of({}),
);
答案 1 :(得分:5)
使用Observable.forkJoin()来运行多个并发的http.get()请求。 如果任何单个请求失败,整个操作将导致错误状态。
"library name"
但是你可以把你的额外GET请求放在错误处理程序中:
getBooksAndMovies() {
return Observable.forkJoin(
this.http.get('/app/books.json').map((res:Response) => res.json()),
this.http.get('/app/movies.json').map((res:Response) => res.json())
);