我有一个可观察的,http是否在处理其他可观察物的中间。如果HTTP获得除200以外的任何内容的响应代码,我想注意此错误,但请继续进行下一个可观察的。
到目前为止,我有这个:
this.getConfigurationSettings()
.do(config => {
console.log('configuration settings.: ', config);
this.configSettings = config;
this.subscriptionService.setWSAddressProvider('badUrl');
})
.switchMap(config => this.askForWSData())
.do(config =>
console.log('askForWSData' + config))
.switchMap(r => this.processWSData())
.subscribe(
config => {
console.log('start of data processing: ' + config);
},
err => {
// Log errors if any
console.log(err);
},
() => console.log('app exiting'));
以及可以返回HTTP错误代码的可观察到的可观察到的:
setWSAddressProvider() : Observable<string[]> {
return this.http.get('badUrl')
.map((res:Response) => {
this.address = res.text();
return [res.text()];
});
// .catch((error:any) =>
// Observable.throw('Server error')
// );
}
上面的情况生成400个响应代码。我想登录该返回,但请继续使用其他可观察到。如何做?
您可以使用catch
处理HTTP错误
setWSAddressProvider() : Observable<string[]> {
return this.http.get('badUrl')
.map((res:Response) => {
this.address = res.text();
return [res.text()];
});
.catch((error: Response | any) => {
if (error instanceof Response) {
if (error.status === 400) {
console.log("Server responded with 400");
// Create a new observable with the data for the rest of the chain
return Observable.of([]);
}
}
// Re-throw unhandled error
return Observable.throw(err);
});
}
尝试使用可观察的onerresumenext函数:
setWSAddressProvider() : Observable<string[]> {
return this.http.get('badUrl')
.map((res:Response) => {
this.address = res.text();
return [res.text()];
})
.onErrorResumeNext((error: Response | any) => {
if (error instanceof Response) {
if (error.status === 400) {
console.log("Server responded with 400");
}
return [];
}
});
}
请参阅https://xgrommx.github.io/rx-book/content/getting_started_with_rxjs/creating_and_querying_observable_sporence/error_handence/error_handling.html#ignoring-igneroring-errors-errors-errors-errors-errors-rorrors-with-onerrorrorreresmenext
和这个答案:捕获和OnErresumenext