如何在rxjs中的订阅中重构订阅

时间:2018-10-01 18:03:08

标签: angular rxjs angular6 rxjs5 rxjs6

例如:

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帖子,用于更新特定工具

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

如何重构此代码?

1 个答案:

答案 0 :(得分:1)

重构代码,您可以使用
mergeMap
switchMap

您的问题是switchMap的完美用例。因为您已经提到this.ds.onSave$是一个主题,当单击另一个组件上的保存按钮时会触发。
在这种情况下,switchMap给您带来的好处是,如果反复单击该按钮,它将自动取消所有旧的订阅(在您的情况下为Http Call in Progress)。

ModifiedCode

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