【发布时间】:2019-06-22 08:10:47
【问题描述】:
我有一个组件订阅了一个同时触发多次的事件。此订阅向服务器发起请求以获取数据。我想要实现的是只触发一个请求。
相反,在最终请求完成之前,我会收到大量已取消的请求:
更新:
this.someObject.onEvent()
.pipe(switchMap((filterCriterias) => this.loadData(filterCriterias)))
.subscribe((res) => {
this.data = res;
});
有没有办法创建一个集水池,只触发最后一个请求,如图所示(首先不会收到取消的请求)?
我正在使用 RxJs 6.3
提前致谢!
【问题讨论】:
-
是否所有四个请求都包含相同的数据,如果第一个请求完成而其他所有请求都消失了可以吗?
-
很遗憾没有。我正在处理竞争条件问题,前两个请求没有数据,只有最后一个有..
-
这就是我使用 switchMap 的原因,但取消的请求有些烦人。
-
那你只能改进你的
loadData()方法,检查它是否有一些有效的数据,只有在这种情况下才真正发出http请求。否则它应该返回empty()。 -
有关映射运算符的更多信息可以在以下位置找到:blog.angular-university.io/rxjs-higher-order-mapping
标签: angular typescript rxjs rxjs6