angular - 如何在 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 帖子
我应该使用某种类型的地图,所以我不订阅这两个区域吗?
如何重构此代码?
解决方案
重构你的代码你可以使用
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)
});
更多
推荐阅读
- html - 即使使用自动检查复选框,如何触发更改
- visual-studio - Visual Studio 2019 编辑器选项卡顺序已更改,而不是按字母顺序?
- javascript - 如何阻止导航栏在html中滚动时缩小
- pandas - Python - 将值从一个数据框传递到另一个查询
- aerospike - 错误:(1)Aerospike中的unstable-cluster如何解决这个问题
- windows - 具有重叠 IO 和 ERROR_DISK_FULL 的 WriteFile?
- ios - 在没有将 isRemovedOnCompletion 设置为 false 的情况下保留动画的 stokeEnd 更改
- javascript - 我可以在 django 中完成文件上传后创建一个弹出窗口吗
- java - Selenium Web 表 java.lang.IndexOutofBoundsException:索引:1,大小:1
- javascript - JavaScript:setInterval() 不会产生预期的输出