【问题标题】:Error being thrown when observable is inside another observable当 observable 在另一个 observable 中时抛出错误
【发布时间】:2023-03-16 21:20:02
【问题描述】:

当内部 observable 完成执行时,控件进入错误块。

我的组件服务层 - 控制转到错误块。

   this.ApplicationService.getPageData(id).subscribe((DataObj)=>{
      console.log(DataObj);
   },
   (error)=>{
      console.log('Failed to get data.'); <-- The control comes here
   })

在我的应用服务层 -

    return this.dbService.queryData(req).pipe(mergeMap((r)=>{
        if(r!=null) {
           let key : string = r.other_id;
           return dbService.queryOtherSource(key).pipe(map((r1)=> {
                    if(r1) {
                        obj = do some data processing
                        return of(obj); <-- Control comes here.
                    }
                },
                (err)=> {
                    throw err;
                }));
            }            
        },
        (error)=>{
            throw error;
        }));

【问题讨论】:

    标签: angular typescript rxjs observable


    【解决方案1】:

    MergeMap 和 Map 不接受错误处理。您正在使用 mergeMap 参数resultSelector,这会引发您看到的错误。

    有一个特定的运算符来处理它们。在需要时抛出错误(使用 throw new Error 或来自 rxjs 的 throwError())。如果您需要在 Observable 链中的特定位置处理它,请在管道中使用运算符 catchError()

    查看此 stackblitz 以获取基于您的代码的错误处理的工作演示: https://stackblitz.com/edit/angular-h88bjo

    在不添加任何信息的情况下重新抛出错误也是没有意义的。从抛出错误的那一刻起,如果没有被捕获,它将传播到顶层。

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多