2017-10-20 9 views
0

私は、左側のリストに異なるリンクがあり、右側にそれぞれの詳細を示す画面があります。私は詳細を得るために以下のサービスを使用しています。それは使用するのは良いアプローチ以前のリクエストをキャンセルし、角度4でエラーをキャッチします。http

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. です1は意味がありませんObservable.of(1)?別の方法がありますか?
  2. 複数のクリック/詳細のリクエストを防止し、最新のものにのみ返信する方法ですか?
  3. この場合、httpのエラーをどのように捕捉できますか?

答えて

0

ここで最終目標は何ですか?よく、あなたの実装に依存するが、一般的に私はちょうどそのような複数の要求を避けるために、ブール値のフラグを設定します)

2、this.http.get(url).map(res => res.json())

私は単にこのようにそれを行うだろう)

1について

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 
}) 
+0

私が欲しいの主なものは、前のHTTP呼び出しは、すぐに新しい要求が行われたとして取り消されるべきである、新たな呼び出しが行われた後、それが最後の呼び出しをprocesing続けるはずの。 – sabithpocker

+0

あなたはこれをチェックしたいかもしれません:[link](https://stackoverflow.com/questions/36490926/how-to-cancel-a-httprequest-in-angular-2)しかし正直なところ私はまだそれを回避する方法。リクエストをキャンセル/キャンセルすると、サーバーが何かをやめることを意味するわけではありません。サーバー側では、要求は通常どおり処理されます。無駄なリクエストでサーバが過負荷にならないようにするには、再考する必要があります:) jm2c – djnose

+0

@djnjsoneあなたのフォローアップをありがとう。私はこれをゆっくりと理解しており、以前のリクエストをキャンセルするには、退会を手伝っています。しかし、あなたが言われたように、無駄な要求でサーバーを過負荷にすることを避ける方法はありますか? – sabithpocker

関連する問題