我正在尝试使用 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;
}