web-dev-qa-db-ja.com

http postリクエストのAngular2タイムアウト

投稿リクエストで3秒のタイムアウトを設定することは可能ですか?どうやって ?

今のところ私のコード

this.http.post('myUrl', 
    MyData, {headers: Myheaders})
        .map(res => res.json())
        .subscribe(
            data => this.ret = data,
            error => console.debug('ERROR', error),
            () => console.log('END')
        );
17
Raph

次のようにtimeout演算子を使用できます。

this.http.post('myUrl', 
        MyData, {headers: Myheaders})
         .timeout(3000, new Error('timeout exceeded'))
         .map(res => res.json())
         .subscribe(
           data => this.ret = data,
           error => console.debug('ERROR', error),
           () => console.log('END')
         );
35

タイムアウトをインポートする必要があるかもしれません

import 'rxjs/add/operator/timeout'

それがなければrxjsで動作させることができませんでした5.0.1およびangular 2.3.1

2018年4月20日編集

そのように演算子をインポートすることは控えてください。rxjs+5.5では、次のような演算子をインポートできます。

import { timeout } from 'rxjs/operators/timeout';
// Use it like so
stream$.pipe(timeout(3000))

this パイプ可能な演算子を詳細に説明しているドキュメントをチェックしてください。

19
realappie

Thierryの答えを修正して、最新リリースで動作するようにしました。タイムアウト機能の2番目のパラメーターを削除する必要があります。 angle-cliの問題に関する議論によれば、タイムアウト関数は常にTimeoutErrorをスローするようになりました。

this.http.post('myUrl', 
    MyData, {headers: Myheaders})
     .timeout(3000)
     .map(res => res.json())
     .subscribe(
       data => this.ret = data,
       error => console.debug('ERROR', error),
       () => console.log('END')
     );
12
Peter