Angular12/Typescript/rxjs:嵌套Promises和rxjs Observable的错误处理

Angular 12/Typescript/rxjs: error handling of nested Promises and rxjs Observable

我混合使用了嵌套的 Promises 和订阅,我只想执行以下操作:

当前方法: 目前我的 bar() returns 是一个布尔 Observable,我分别处理每个错误,对于 Promise 通过 .catch,对于 rxjs Observable 通过错误句柄:

    foo(): void {
       this.bar.subscribe((data: boolean) => console.log('the function call bar() was ' + data));
    }

    bar(): Observable<boolean> {
    let subject = new Subject<boolean>();
    
        this.httpHandler.newFoo().subscribe(
        (data) => 
          this.bar(data)
            .then((barData) => 
              this.httpHandler.updateBar().subscribe(
                (barData2) => subject.next(true),
                (error) => subject.next(false)))
            .catch(err => subject.next(false)),
        (error) => subject.next(false));

        return subject.asObservable();
    }

显然这很混乱,而且为了了解 bar() 函数调用是否完成且没有任何错误的简单目的看起来有点矫枉过正。有没有更好的方法来完全处理嵌套错误?

提前致谢

我认为这可以简洁地写成:

this.httpHandler.newFoo().pipe(
  switchMap(data =>
    from(this.bar(data)).pipe(
      switchMap(() =>
        this.httpHandler.updateBar().pipe(
          mapTo(true)
        )
      )
    )
  ),
  catchError(() => of(false))
)

要从 promise 中创建可观察对象,请使用 from()。使用 switchMap() 在 observable 之间转换。那么这只是链接你的电话的问题:

this.httpHandler.newFoo() -> this.bar() -> this.httpHandler.updateBar()

并最终返回 true,否则 false 任何错误。