Angular / RXJS - 如何在 switchMap 之后执行逻辑

Angular / RXJS - How to perform logic after a switchMap

在我的一个组件中,我有一个更新本地可观察对象 (album$) 的函数,然后在我的 html 中使用它来显示数据 (*ngIf="album$ | async as album")。这工作得很好。

  getData() {
    this.album$ = this._activatedRoute.params.pipe(
      tap(params => {
        // Update variables
      }),
      switchMap(params => {
        return this.service.getData(params.id, params.id2);
      })
    )
  }

但是,新要求意味着我需要更新我的一项服务中的 BehaviorSubject。上面的函数似乎是一箭双雕的好地方。

一旦returns上面的函数是数据,我想执行patchValuethis.service.obs$.next

我确实在我拥有的一个单独的组件中实现了这个功能,但是由于我没有在上面的组件中使用订阅,我将如何在上面的函数中添加 this.service.album$.next(data);

// 另一个函数的示例,它具有我非常想要的功能,但它是基于订阅的。

  getData(){
    this._subscription = this._activatedRoute.params.pipe(
      tap(params => {
        // update variables
      }),
      switchMap(params => {
        return this.service.getData(params.id1, params.id2);
      })
    ).subscribe(data => {
      if (data) { 
        this.service.obs$.next(data);
      } 
    });
  }

您可以将 tapmap 通过管道传输到内部可观察对象。尝试以下

getData() {
  this.album$ = this._activatedRoute.params.pipe(
    tap(params => {
      // update variables
    }),
    switchMap(params => {
      return this.service.getData(params.id, params.id2).pipe(
        tap(data => {
          this.service.obs$.next(data);
          // patch value
          // do something else
        })
      );
    })
  );
}