如何重构一个内部认购中rxjs的预约(How to refactor a subscribe ins

2019-09-30 22:23发布

例如:

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的职位,更新一个特定的工具

我应该是使用某种类型的地图,我不会订阅这两个领域的?

我如何重构这个代码?

Answer 1:

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

你的问题是一个完美的使用情况switchMap 。 因为你刚才提到this.ds.onSave$是被点击了不同成分的保存按钮时触发的主题。
优点switchMap让你在这种情况下是将取消所有旧订阅(HTTP通话中你的情况),如果自动按钮被点击多次。

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


文章来源: How to refactor a subscribe inside a subscribe in rxjs