RxJS内层Observable报错时如何返回首个Observable的产出数据
RxJS 流错误捕获后返回指定上游数据实现方案
你需要修正catchError的返回规则:catchError要求必须返回Observable类型,你之前直接返回普通对象的写法不会生效。
正确实现代码如下:
.pipe( tap(() => this.loading$.next(false)), filter(Boolean), map(() => new SemanticObject(this.objectLayer, this.map)), concatMap((semanticObject: SemanticObject) => from(semanticObject.saveObject(semanticObject.getObject())).pipe( concatMap((updatedObject: ObjectLayer) => semanticObject.changeObjectStateUnom().pipe( // 捕获状态修改接口的错误,返回包装为Observable的save结果 catchError(() => of(updatedObject)), // 状态修改成功也映射回save接口的返回值 mapTo(updatedObject) ) ), // 可选:如果saveObject本身可能报错,在这里加catchError返回兜底值 // catchError(() => of(/* 自定义兜底返回数据 */)) ) ), )
核心调整说明
- 用
of()包裹需要返回的updatedObject,转换为符合RxJS要求的Observable类型 - 无论
changeObjectStateUnom执行成功还是抛出错误,最终下游都会拿到saveObject返回的初始数据,匹配你的需求 - 可根据业务需要决定是否对
saveObject的报错做兜底处理
内容的提问来源于stack exchange,提问作者user14480036
相关产品推荐
相关产品推荐

