Angular2 - 如何中止/取消正在运行的http请求调用?

时间:2016-05-18 08:36:04

标签: angular

我自动完成搜索。

keypress(valueSearch){
   // call Ajax search with ValueSearch
   // ....
}

每次按键事件,我都想取消旧的http请求。

1 个答案:

答案 0 :(得分:2)

实际上你需要依赖从事件中创建的observable。如果使用默认事件绑定,则无法访问此可观察对象。关于这个问题存在未解决的问题:

现在你需要用@ViewChild装饰器引用元素并在其上配置一个observable:

@ViewChild('someElt')
someElt: ElementRef;

ngAfterViewInit() {
  Observable.fromEvent(someElt.nativeElement, 'keyup');
}

现在,您可以利用switchMap运算符来对其进行HTTP请求。如果数据流中有正在进行的请求,它将被取消:

@ViewChild('someElt')
someElt: ElementRef;

ngAfterViewInit() {
  Observable.fromEvent(someElt.nativeElement, 'keyup').switchMap((evt) => {
    return this.http.get('something').map(res => res.json())
  }).subscribe(data => {
    // use data
  });
}