我有一个网络调用,api可能会抛出一个400错误。我想优雅地处理这件事。
现在我就像下面这样做-
private fetchStatus(objectId: string): Observable<string> {
return Observable.create((observer) => {
this.http.get('/api/data-one').subscribe(response => {
if (response.result === 'SUCCESS') {
observer.next('SUCCESS');
} else {
observer.next('DENIED');
}
observer.complete();
},
error => {
observer.next('DENIED');
observer.complete();
});
});
},但是我更喜欢使用Observable.map操作符。,Observable.map的问题是当api抛出一个400,整个可观察到的模式进入错误模式。
我想防止这种情况,因为get调用与其他调用一起在forkJoin中使用。如果失败,将意味着下面整个forkJoin的失败。
forkJoin([
this.http.get('/api/route-2'),
this.http.get('/api/route-1'),
this.fetchStatus('abc')
]).subscribe((responseCollection: any) => {
observer.next({
result1: responseCollection[0],
result2: responseCollection[1],
result3: responseCollection[2]
});
observer.complete();
}, error => observer.error(error));发布于 2019-05-09 06:14:53
您可以使用catchError. 地图 和来完成这一任务。
catchError将捕获源引发的任何错误,并返回一个新的可观察的。在您的示例中,在发生HTTP错误时,这个新的可观察的内容将传递给forkJoin。
private fetchStatus(objectId: string): Observable<string> {
return this.http.get('/api/data-one').pipe(
map(response => response.result === 'SUCCESS' ? 'SUCCESS' : 'DENIED'),
catchError(error => of('DENIED')),
);
}https://stackoverflow.com/questions/56052960
复制相似问题