Angular RxJS首先阻止switchMap发送请求
我有一个订阅了一个事件的组件,该事件在同一时间被多次触发。此订阅启动对服务器的请求以获取数据。我想要实现的是只触发一个请求 相反,在最终请求完成之前,我会收到大量已取消的请求: 更新: 有没有一种方法可以创建一个集水池,只触发图片中的最后一个请求,而不首先得到取消的请求 我使用的是RxJs 6.3Angular RxJS首先阻止switchMap发送请求,angular,typescript,rxjs,rxjs6,Angular,Typescript,Rxjs,Rxjs6,我有一个订阅了一个事件的组件,该事件在同一时间被多次触发。此订阅启动对服务器的请求以获取数据。我想要实现的是只触发一个请求 相反,在最终请求完成之前,我会收到大量已取消的请求: 更新: 有没有一种方法可以创建一个集水池,只触发图片中的最后一个请求,而不首先得到取消的请求 我使用的是RxJs 6.3 提前谢谢 您似乎可以使用排气图而不是开关图 排气图将忽略所有后续排放,直到内部可观测完成。因此,即使OneEvent发出五次,只有第一次会触发this.loadData。在激活this.loadDat
提前谢谢 您似乎可以使用排气图而不是开关图 排气图将忽略所有后续排放,直到内部可观测完成。因此,即使OneEvent发出五次,只有第一次会触发this.loadData。在激活this.loadData完成之前,将忽略所有其他排放
this.someObject.onEvent()
.pipe(
exhaustMap(() => this.loadData())
)
.subscribe((res) => ...);
看起来你可以用排气图代替开关图 排气图将忽略所有后续排放,直到内部可观测完成。因此,即使OneEvent发出五次,只有第一次会触发this.loadData。在激活this.loadData完成之前,将忽略所有其他排放
this.someObject.onEvent()
.pipe(
exhaustMap(() => this.loadData())
)
.subscribe((res) => ...);
这四个请求是否都包含相同的数据?如果第一个请求完成,而所有其他请求都消失,是否可以?不幸的是,没有。我正在处理一个竞争条件问题,前两个请求没有数据,只有最后一个有..这就是我使用switchMap的原因,但是取消的请求有些令人恼火。然后你只能改进你的loadData方法,检查它是否有一些有效的数据,只有在这种情况下才真正发送http请求。否则它将返回空。有关映射运算符的更多信息,请访问:是否所有四个请求都包含相同的数据?如果第一个请求完成,而所有其他请求消失,是否可以?不幸的是,否。我正在处理一个争用条件问题,前两个请求没有数据,只有最后一个有..这就是我使用switchMap的原因,但是取消的请求有些令人恼火。然后你只能改进你的loadData方法,检查它是否有一些有效的数据,只有在这种情况下才真正发送http请求。否则它应该返回空。有关映射操作符的更多信息可以在以下位置找到:exhaustMap的问题是,如果没有请求所需数据的排放更早发出,那么我就不会从请求中得到响应。嗯,我想你应该过滤掉那些不应该触发任何请求的排放物…如果响应是可缓存的,为什么不将其缓存以供后续请求使用?exhaustMap的问题是,如果没有请求所需数据的排放物提前发出,那么我就得不到请求的响应。嗯,我想你们应该过滤掉那个些不应该触发任何请求的排放物……若响应是可缓存的,为什么不将其缓存以供后续请求使用呢?
this.someObject.onEvent()
.pipe(debounceTime(300),switchMap(() => this.loadData()))
.subscribe((res) => {
this.data = res;
});