Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular RxJS首先阻止switchMap发送请求_Angular_Typescript_Rxjs_Rxjs6 - Fatal编程技术网

Angular RxJS首先阻止switchMap发送请求

Angular RxJS首先阻止switchMap发送请求,angular,typescript,rxjs,rxjs6,Angular,Typescript,Rxjs,Rxjs6,我有一个订阅了一个事件的组件,该事件在同一时间被多次触发。此订阅启动对服务器的请求以获取数据。我想要实现的是只触发一个请求 相反,在最终请求完成之前,我会收到大量已取消的请求: 更新: 有没有一种方法可以创建一个集水池,只触发图片中的最后一个请求,而不首先得到取消的请求 我使用的是RxJs 6.3 提前谢谢 您似乎可以使用排气图而不是开关图 排气图将忽略所有后续排放,直到内部可观测完成。因此,即使OneEvent发出五次,只有第一次会触发this.loadData。在激活this.loadDat

我有一个订阅了一个事件的组件,该事件在同一时间被多次触发。此订阅启动对服务器的请求以获取数据。我想要实现的是只触发一个请求

相反,在最终请求完成之前,我会收到大量已取消的请求:

更新:

有没有一种方法可以创建一个集水池,只触发图片中的最后一个请求,而不首先得到取消的请求

我使用的是RxJs 6.3


提前谢谢

您似乎可以使用排气图而不是开关图

排气图将忽略所有后续排放,直到内部可观测完成。因此,即使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;
});