我在每次按键时拨打api电话。以下是代码:
getResponse(Event) {
this.responseService.getHttpResponse(this.searchInstance).debounceTime(5000).subscribe(.......);
据我了解,这不应该在每次按键时拨打api电话,而是等待最后一次按键5秒后再获得结果。一种可能性是,因为我打电话给getHttpResponse'在消除时间(正在进行http呼叫)之前,无论去抖时间如何,都会进行http呼叫。但这不应该在5秒之前获取结果。如果我对该方法做错了,请纠正我。
答案 0 :(得分:1)
this.responseService.getHttpResponse(this.searchInstance).debounceTime(5000).subscribe(.......);
如果按键在少于5秒内发生,则不会取消新的HTTP调用。
相反它会:
- 触发HTTP请求
- 继续前等待5秒
- 如果在这些5中发出了另一个请求,请不要将响应传递给Observable链
但你想要的是:
- 等待5秒以确保不再发生击键
- 然后触发HTTP请求
为此请阅读关于Thoughtram的优秀文章。
摘自文章
它可能看起来像那样:
export class App {
items: Observable<Array<string>>;
term = new FormControl();
constructor(private wikipediaService: WikipediaService) {
this.items = this.term.valueChanges
.debounceTime(400)
.distinctUntilChanged()
.switchMap(term => this.wikipediaService.search(term));
}
}