DebounceTimer不工作:Angular 2

时间:2017-05-28 19:14:16

标签: angular rxjs

我在每次按键时拨打api电话。以下是代码:

getResponse(Event) {

  this.responseService.getHttpResponse(this.searchInstance).debounceTime(5000).subscribe(.......);

据我了解,这不应该在每次按键时拨打api电话,而是等待最后一次按键5秒后再获得结果。一种可能性是,因为我打电话给getHttpResponse'在消除时间(正在进行http呼叫)之前,无论去抖时间如何,都会进行http呼叫。但这不应该在5秒之前获取结果。如果我对该方法做错了,请纠正我。

1 个答案:

答案 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));
  }
}