angular - 使用rxjs concat时出现错误后如何继续调用API?
问题描述
我正在使用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();
}
解决方案
错误捕获应该针对每个 observable 单独发生。你可以简单地返回一个空的 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();
推荐阅读
- javascript - Ruby on Rails,当我查看 console.log 未定义时
- python - Django 创建多个视图
- jsonpath - 过滤器不起作用的 Json 路径逻辑非运算符
- amazon-cloudformation - eskctl 是否支持将 CloudFormation 的角色 ARN 设置为 Assume
- ios - Apollo ios codegen 生成可选值
- javascript - jQuery:如何在单击和(重新)加载单选按钮时添加类?
- image - Docker compose - 只有在所有容器全部退出时,我才能停止它们?
- powerbi - M & Power Query:如何在循环中使用 $Skip ODATA 表达式?
- excel - Excel VBA:检查许多设置后Worksheet_Change根本没有触发
- javascript - 如何使用JavaScript,Spring Boot将附加在JSP中的按钮单击的div中的数据持久化?