取消先前的请求并捕获Angular 4中的错误http

时间:2017-10-20 11:49:06

标签: angular rxjs

我的屏幕左侧列表有不同的链接,右侧显示每个链接的详细信息。我正在使用以下服务来获取详细信息。

getDetails(id: string) : Observable<any>{
    const url = `${environment.server}/api/details/${id}`
    return Observable.of(1)
        .debounceTime(2000)
        .switchMap(() => this.http.get(url))
        .map(r => r.json())
}
  1. 使用Observable.of(1) 1没有意义的好方法吗?有不同的方法吗?
  2. 这是我们如何阻止多次点击/请求详细信息并仅回复最新的一次?
  3. 在这种情况下,我如何捕捉http
  4. 中的错误

1 个答案:

答案 0 :(得分:0)

你最终的目标是什么?关于

1)我会这样做:this.http.get(url).map(res => res.json())

2)好吧,取决于你的实现,但一般来说我只会设置一个布尔标志来避免多个请求,如下所示:

return new Observable(done => {
   if (!this.myQueryIsRunning) {
      this.myQueryIsRunning = true;
      this.http.get(url).map(res => res.json()).subscribe(myData=> {
        this.myQueryIsRunning = false;
        done.next(data); 
        done.complete();  
      })
   } else {
      done.complete();  // or throw an error like done.error('my error');
   }

3)不确定你的意思。你总是会遇到这样的错误:

this.http.get(url).map(res => res.json()).subscribe(myData=> {
    this.myQueryIsRunning = false;
    done.next(data); 
    done.complete();  
 }, hereIsAnError => {
    // do something about it
 })