使用rxjs concat时出现错误后如何继续调用API?
How can I continue to call API after get error when using rxjs concat?
我正在使用 concat 顺序调用多个 API,但是当出错时,concat 停止调用 api,那么如何得到错误并继续调用下一个 API,这里是我的代码:
getData() {
concat(...this.data.map(asset =>
this.assetService.requestData({ assetId: asset._id })
))
.pipe(catchError(error => {
console.log(error);
// return of(null);
this.error = error;
return throwError(error);
}))
.subscribe();
}
错误捕获应该针对每个可观察对象单独发生。你可以简单地 return 一个空的 observable:
import { EMPTY } from 'rxjs';
concat(...this.data.map(asset =>
this.assetService.requestData({assetId: asset._id})
.pipe(catchError(error => {
console.log(error);
this.error = error;
return EMPTY;
}))
))
.pipe(filter(data => !!data)) // add this line if you do not want to see nulls in result
.subscribe();
另一种选择是使用 onErrorResumeNext
函数:
import { onErrorResumeNext } from 'rxjs';
onErrorResumeNext(...this.data.map(asset =>
this.assetService.requestData({assetId: asset._id})
)
.subscribe();
我正在使用 concat 顺序调用多个 API,但是当出错时,concat 停止调用 api,那么如何得到错误并继续调用下一个 API,这里是我的代码:
getData() {
concat(...this.data.map(asset =>
this.assetService.requestData({ assetId: asset._id })
))
.pipe(catchError(error => {
console.log(error);
// return of(null);
this.error = error;
return throwError(error);
}))
.subscribe();
}
错误捕获应该针对每个可观察对象单独发生。你可以简单地 return 一个空的 observable:
import { EMPTY } from 'rxjs';
concat(...this.data.map(asset =>
this.assetService.requestData({assetId: asset._id})
.pipe(catchError(error => {
console.log(error);
this.error = error;
return EMPTY;
}))
))
.pipe(filter(data => !!data)) // add this line if you do not want to see nulls in result
.subscribe();
另一种选择是使用 onErrorResumeNext
函数:
import { onErrorResumeNext } from 'rxjs';
onErrorResumeNext(...this.data.map(asset =>
this.assetService.requestData({assetId: asset._id})
)
.subscribe();