Observable(HTTPリクエストから)を作成して失敗時に再試行しました。しかし、サーバが429 Too many requests
エラーで応答した場合、はを再試行したいと思います。角2 RxJS Observable:429のステータスを除いて再試行
現在の実装では、何があっても1秒間隔で2回リトライします。
return this.http.get(url,options)
.retryWhen(errors => {
return errors.delay(1000).take(2);
})
.catch((res)=>this.handleError(res));
errors
は、観察可能である。エラーの原因となった基になるResponse
オブジェクトを取得するにはどうすればよいですか?それを私は、サーバーのステータスコードにアクセスし、それが429ではない場合のみ、再試行することができます。
return this.http.get(url,options)
.retryWhen(errors => {
if($code == 429) throw errors;
else return errors.delay(1000).take(2);
})
.catch((res)=>this.handleError(res));
にはどうすればretryWhen
内ステータスコードを取得できますか?
Angular 2 rc.6
、RxJS 5 Beta 11
、Typescript 2.0.2
サーバから受信したためにエラーがスローされた場合、エラーインスタンスには 'status'と' statusText'プロパティが含まれている必要があります。 – cartant
@cartantはい、どうすればこのインスタンスを取得できますか? 'retryWhen'を削除すると、インスタンスは' Response'クラスのオブジェクトとして上記のhandleError()に渡されます。しかし、私は 'retryWhen'ロジック中にそれを読む方法を知らない。私がOPで言及したように、その関数が受け取るもの(上記の 'errors'と呼ばれる)はObservableであり、' status'と 'statusText'プロパティを持つ' Response'というHTTPではありません。 – BeetleJuice
私は、(サーバエラーの結果である)観測可能なエラーのすべてのエラーインスタンスが 'status'と' statusText'プロパティを含むことを期待しています。私は 'retryWhen'演算子に精通していません - したがって、コメント - しかし、エラー自体から'ステータス 'を得ることができるはずです。 – cartant