首页 > 解决方案 > 如何在 rxjs 中的订阅中重构订阅

问题描述

例如:

this.saveSubscription$ = this.ds.onSave$.subscribe(x => 
  this.sb.updateMachineTool(this.viewEditModel.viewEditModel).subscribe(x = {
    console.log('alert results', x)
  })
)

this.ds.onSave$是在单击不同组件上的保存按钮时触发的主题。

this.sb.updateMachineTool是更新特定工具的 httpClient 帖子

我应该使用某种类型的地图,所以我不订阅这两个区域吗?

如何重构此代码?

标签: angularrxjsangular6rxjs5rxjs6

解决方案


重构你的代码你可以使用
mergeMap
switchMap

您的问题是switchMap. 因为正如您所提到this.ds.onSave$的,当单击不同组件上的保存按钮时触发的主题。
在这种情况下为您提供的优势switchMap是,如果重复单击该按钮,它将自动取消所有旧订阅(在您的情况下为 Http Call in Progress)。

修改代码

this.saveSubscription$ = this.ds.onSave$.pipe(switchMap(()=> 
  this.sb.updateMachineTool(this.viewEditModel.viewEditModel)
  )
).subscribe(x = {
    console.log('alert results', x)
  });

更多

  1. Understanding mergeMap and switchMap in RxJS
  2. The Simple Difference Between RxJS switchMap and mergeMap

推荐阅读