RxJS中捕获错误并展示翻译后错误提示的最优方案
RxJS请求错误提示的最佳实现方案
优化思路
将错误提示的展示逻辑完全放在catchError操作符内部处理,通过RxJS操作符组合处理翻译请求,彻底分离成功逻辑与错误逻辑,同时规避嵌套subscribe的反模式。
代码实现
import { EMPTY } from 'rxjs'; import { catchError, switchMap } from 'rxjs/operators'; this.myService.editSendReport(params) .pipe( catchError(() => // 用switchMap处理翻译请求的Observable this.translateService.get('settings.report.error').pipe( switchMap(errorMessage => { // 展示翻译后的错误提示 this.snackBar.open(errorMessage, undefined, { duration: 3000 }); // 返回EMPTY终止流,确保subscribe的next回调仅处理成功场景 return EMPTY; }) ) ) ) .subscribe((res: MyResponse) => { // 此处仅编写请求成功后的业务逻辑 ... });
方案优势
- 逻辑清晰:成功业务逻辑与错误提示逻辑完全拆分,
subscribe回调只需关注正常流程,代码可读性大幅提升 - 规避反模式:通过
switchMap组合翻译请求的Observable,无需在subscribe内部嵌套订阅,符合RxJS最佳实践 - 适配规范:利用
catchError捕获错误并处理,返回EMPTY让流正常终止,适配subscribe匿名error回调弃用后的规范要求
内容的提问来源于stack exchange,提问作者Anna Melashkina
相关产品推荐
相关产品推荐

