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运算符不取消http请求_Angular_Observable_Rxjs6_Angular10_Switchmap - Fatal编程技术网

Angular RxJS switchMap运算符不取消http请求

Angular RxJS switchMap运算符不取消http请求,angular,observable,rxjs6,angular10,switchmap,Angular,Observable,Rxjs6,Angular10,Switchmap,我一直在努力弄清楚为什么没有使用switchMap操作符取消HTTP请求 import {Observable, of, Subject, Subscription, timer} from 'rxjs'; import {HttpClient} from '@angular/common/http'; constructor(private http: HttpClient) {} ngOnInit(): void { const makeRequest$ = new Subject(

我一直在努力弄清楚为什么没有使用switchMap操作符取消HTTP请求

import {Observable, of, Subject, Subscription, timer} from 'rxjs';
import {HttpClient} from '@angular/common/http';

constructor(private http: HttpClient) {}

ngOnInit(): void {
  const makeRequest$ = new Subject();
  const myResponse$ = makeRequest$.pipe(switchMap((id) => {
    const url = `${environment.apiUrl()}/accounts?${id}`;
    return this.http.get<any>(url, {
      headers: {
        'Content-Type': 'application/json'
      }
    });
}));

myResponse$.subscribe(d => console.log(d));


makeRequest$.next(1);
makeRequest$.next(-3);
makeRequest$.next(3); }
import{Observable,of,Subject,Subscription,timer}来自'rxjs';
从'@angular/common/http'导入{HttpClient};
构造函数(私有http:HttpClient){}
ngOnInit():void{
const makeRequest$=新主题();
const myResponse$=makeRequest$.pipe(开关映射((id)=>{
常量url=`${environment.apiUrl()}/accounts?${id}`;
返回此.http.get(url{
标题:{
“内容类型”:“应用程序/json”
}
});
}));
myResponse$.subscribe(d=>console.log(d));
makeRequest$.next(1);
makeRequest$.next(-3);
makeRequest$.next(3);}
下面的代码将只打印第三个调用的响应,但不会取消其余的HTTP请求

我有一个用于HTTP失败响应的拦截器,它将由于第二个id错误的调用而触发警报

当我在stackblitz中尝试此代码时,它可以工作,请求被取消。 我正在使用Angular10


我缺少的任何设置?

如果您提供了提到的stackblitz,以检查它与问题中的代码有何区别,您能否提供一些关于它不工作的环境的信息(我假设在您的本地机器上)?这是一个有效的例子。我已经在本地机器和AWS lambda上运行了它。什么样的附加信息会有帮助?谢谢你的帮助!一个请求至少需要几毫秒。我认为对next的调用非常快,您需要在我的env上模拟一个delayOn,我调用不同的API,这需要很长时间才能响应。但是switchMap的工作原理是,只有最后一个响应被传递给订阅者,但飞行中的请求没有被取消,就像stackblitz示例中的那样,在我的机器上使用相同的代码,如果您提供上面提到的stackblitz来检查它与问题中的代码有什么不同,那么这将是非常有帮助的,您能提供一些关于它不工作的环境的信息吗(我假设在您的本地机器上)?这是一个有效的例子。我已经在本地机器和AWS lambda上运行了它。什么样的附加信息会有帮助?谢谢你的帮助!一个请求至少需要几毫秒。我认为对next的调用非常快,您需要在我的env上模拟一个delayOn,我调用不同的API,这需要很长时间才能响应。但是switchMap的工作原理是,只有最后一个响应被传递给订阅者,但飞行中的请求没有被取消,就像stackblitz示例中那样,在我的机器上使用相同的代码