0

我正在尝试使用 Rxjs 取消任何待处理的请求。我浏览了一些建议使用SwitchMap()anddebounceTime()运算符的文档/博客。我正在尝试相同但无法取消之前的待处理请求。

就我而言,我收到了所有先前和最新请求的响应。下面是代码和问题描述。

我有 n 个按钮,单击每个按钮时,我使用主题发出事件(id),然后使用该 id 发出 http 请求。我想要实现的是,当单击一个新按钮时,如果有任何尚未收到响应的其他按钮单击的先前未决请求,我想取消该请求,即每次我点击/切换到新的按钮我应该只得到那个请求的响应,而不是旧的

this.cancelPreviousReq = this.buttonSwitch$
    .pipe(debounceTime(1000), switchMap(data => this.service.getData(data)))
    .subscribe(data1 => {
      console.log("data ===", data1);
      this.service1.subject.next(data1);
    });

在每次按钮单击时,发出一个 Id

 this.sub1= this.someService.subject1.subscribe((data: any) => {
    this.buttonSwitch$.next(id); // emit the event here
});

服务电话

getData(id: number): Observable<any>{
    let subject = new Subject<any>();
    let observable = subject.asObservable();
    this.http.get<any>('some url' + id).subscribe((data: any) => {
      if (!data){
        data= this.service.getData1();
      }
      subject.next(data);
    });
    return observable;
  }
4

0 回答 0