Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Javascript 如何在使用forkJoin Rxjs触发请求时取消请求,Angular_Javascript_Arrays_Angular_Typescript_Rxjs - Fatal编程技术网

Javascript 如何在使用forkJoin Rxjs触发请求时取消请求,Angular

Javascript 如何在使用forkJoin Rxjs触发请求时取消请求,Angular,javascript,arrays,angular,typescript,rxjs,Javascript,Arrays,Angular,Typescript,Rxjs,我有一组6个http get请求,无论单击按钮的顺序如何,我都必须执行这些请求。为此,我使用了forkJoin <button click="getData()">Get Data</button> getData(){ const ids = [1,2,3,4,5,6]; const obs = ids.map(id => this.http.get('<my url>/' + id) forkJoin(...obs).subsc

我有一组6个http get请求,无论单击按钮的顺序如何,我都必须执行这些请求。为此,我使用了
forkJoin

<button click="getData()">Get Data</button>


getData(){

  const ids = [1,2,3,4,5,6];

  const obs = ids.map(id => this.http.get('<my url>/' + id)

  forkJoin(...obs).subscribe(res => console.log(res));

}
获取数据
getData(){
常量ID=[1,2,3,4,5,6];
const obs=ids.map(id=>this.http.get('/'+id)
forkJoin(…obs.subscribe(res=>console.log(res));
}
如果用户多次单击该按钮,是否有办法取消以前未完成的请求,而只对后端进行新的调用

我做了一些研究,了解了switchMap操作符在取消请求方面的帮助,但我不确定在这里我将如何使用它

请帮助

公开订阅:订阅;
public subscription: Subscription;

getData(){

  const ids = [1,2,3,4,5,6];

  const obs = ids.map(id => this.http.get('<my url>/' + id)

  if(this.subscription){
     this.subscription.unsubscribe();
  }

  this.subscription = forkJoin(...obs).subscribe(res =>console.log(res))
}
getData(){ 常量ID=[1,2,3,4,5,6]; const obs=ids.map(id=>this.http.get('/'+id) 如果(此订阅){ this.subscription.unsubscripte(); } this.subscription=forkJoin(…obs).subscripte(res=>console.log(res)) }
公开订阅:订阅;
getData(){
常量ID=[1,2,3,4,5,6];
const obs=ids.map(id=>this.http.get('/'+id)
如果(此订阅){
this.subscription.unsubscripte();
}
this.subscription=forkJoin(…obs).subscripte(res=>console.log(res))
}

我想,您要找的接线员是


旧版本的ExhaustMap是flatMapFirst()操作符,它从第一个映射的可观察对象传播数据,只有在完成之前丢弃所有其他可观察对象时,它才会进入下一个。我想,您要寻找的操作符是

旧版本的ExhaustMap是flatMapFirst()操作符,它传播来自第一个映射的可观察对象的数据,只有在完成之前丢弃所有其他可观察对象时,它才会进入下一个。如下所述:

大多数jqueryajax方法都返回
XMLHttpRequest
(或等效的)对象,因此您可以只使用
abort()

var xhr=$.ajax({
类型:“POST”,
url:“some.php”,
成功:功能(msg){
警惕(“完成”);
}
});
//终止请求
xhr.abort()
如下所述:

大多数jqueryajax方法都返回
XMLHttpRequest
(或等效的)对象,因此您可以只使用
abort()

var xhr=$.ajax({
类型:“POST”,
url:“some.php”,
成功:功能(msg){
警惕(“完成”);
}
});
//终止请求
xhr.abort()


您不能在旧请求完成之前禁用按钮吗?您是否考虑过在请求进行时禁用按钮?@Tim567是的,可以这样做,但想知道我如何取消以前的点击请求并触发新呼叫上述代码只是为了说明我的问题,实际上是一个带有next和pr的旋转木马上一个按钮,当用户点击旋转木马上的下一个按钮并等待所有6个请求完成时,我无法禁用该按钮,请参见此处的答案-您不能在旧请求完成之前禁用该按钮吗?您是否想过在请求进行时禁用该按钮?@Tim567是的,可以这样做,但想知道我如何做到取消以前的点击请求并触发新的呼叫上面的代码只是为了演示我的问题,它实际上是一个带有“下一步”和“上一步”按钮的旋转木马,当用户单击旋转木马中的“下一步”按钮并等待所有6个请求完成时,我无法禁用该按钮,请参见此处的答案-这是什么。过程?这是一个好主意。但这不是一个好主意取消现有请求并通过按键发送新请求,而不是取消新请求并保留旧请求?他说他想放弃旧请求,只满足问题中的新请求,如果他想要旧请求,我会给他排气图的解决方案。这是什么。过程?这是个好主意。但这不是取消现有请求吗他说他想放弃旧的请求,只满足新的请求。如果他想要旧的,我会给他排气图的解决方案。如果你能帮助我如何使用它,那就太好了这是一种传统的javascript方式来中止请求,我更喜欢rxjs方式,无论如何谢谢你的回答:)这是一种传统的javascript方式来中止请求,我更喜欢rxjs方式,无论如何谢谢你的回答:)