【发布时间】:2020-10-23 04:35:02
【问题描述】:
我知道有很多这样的问题,但它们经常让我感到困惑或难以适用于我的情况,所以我在这里问,以便我能把它弄明白。在我的组件打字稿文件中,我有一个调用服务的方法,该服务使用 http 返回 api 数据,因此当用户单击界面上的芯片时,他们调用以下内容..
fetchCounts(filters?: any): void {
this.loaded = false;
this.apiCall = this.api.getCounts(filters).subscribe((results: any) => {
// do something with the returned data
this.loaded = true;
this.apiCall.unsunscribe()
});
}
我的 api 服务如下所示:
getCounts(filters?: any): Observable<any> {
let params: any;
if (filters?.car?.length || filters?.bike?.length) {
params = this.addObjectToParams(new HttpParams(), filters);
}
return this.http.get('api/counts', { params } )
.pipe(map(this.extractData));
}
现在我注意到,当用户单击我的界面添加和删除进行 API 调用的芯片时,由于 API 调用过载/大量 API 调用,该界面似乎不再显示真实数据。因此,如果进行了新调用(如果再次调用 fetchCounts),我想取消当前的 api/http 调用。我曾尝试在getCountsmethod 中为.pipe 添加一个去抖,就像这样....pipe( debounceTime(500), map(this.extractData)); 但它似乎没有做任何事情。我想我必须添加一个switchMap,但是当我添加我的代码时,它会因为我缺乏理解而中断。我目前正在浏览文档...但我们将不胜感激。
【问题讨论】:
-
能否请您说明如何调用
fetchCounts()函数?它是如何作为事件处理程序绑定到芯片的?与 HTML 模板一起显示。