RxJS5でHTTPリクエストを送信するための再試行を遅らせるにはどうすればよいですか?

Reinis Riekstins

RxJS5の監視可能なストリームを希望どおりに動作させることに問題があります。

ストリームはaxiosを使用してHTTPリクエストをWebサイトに送信することになっています。応答がHTTPエラー(axiosはJavaScriptエラーを強制します)の場合、監視可能なシーケンスは10ミリ秒待機してから、リクエストの再送信を試行する必要があります(何らかの理由で)リクエストの送信先のWebサイトは、リクエストの送信をすぐに再試行してエラーをスローし続けると気に入らないが、ほとんどの場合、10ミリ秒の遅延で正常に動作します)。

Rx.Observable
  .fromPromise(axios('http://example.com/12345'))
  .map(x => new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(x)
    }, 2000)
  }))
  .debounceTime(2000)
  .do(console.log)
  .retry(10)
  .subscribe(console.log, console.error)

ストリームがどのように機能するかをより明確にするために、Codepenにいくつかの変更を加えた例があります:http://codepen.io/leakyabstractions/pen/pNmvyZ?editors = 0010

私が使用してみました.delay().debounceTime().timer().timeInterval().timeout()の代わりに、.map()オペレータが、何も(含めない.map())動作します。私は何が間違っているのですか?

なるがままに

それで、基本的にあなたが探しているのは「10ms後に再試行しますが、10回だけです」ですか?(これはあなたがretry(10)提案するものです。私は洗練された解決策がretryWhenここに含まれると思います:

const mockedRestError$ = Rx.Observable.throw("http://example.com/12345");

// we'll start with an empty string, because otherwhise
// we could not log the "start..."
Rx.Observable.of("")
  .do(() => console.log("start..."))
  .switchMapTo(mockedRestError$)
  .retryWhen(tenTimesWithDelay)
  .subscribe(console.log, console.error, console.info); // is never called, because 


function tenTimesWithDelay(errors) {
  return errors
    .scan((count, err) => {
      ++count;
      // optionally to throw the error all the way down to the subscription
      // comment the throw out to have the stream simply complete
      if (count >= 10) {
        throw err;
      }
      return count;
    }, 0)
    .takeWhile(count => count < 10)
    .do(count => console.log(`Retry #${count} in 100ms...`))
    .delay(100);
}

コードペンは次のとおりです:http//codepen.io/anon/pen/bBydwZ?editors = 0010

また、コンソールに少しすっきりと表示されるように、遅延を10ミリ秒ではなく100ミリ秒に設定したことにも注意してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

送信されたすべてのHTTPリクエストをカウントし、再試行するにはどうすればよいですか?

分類Dev

ajaxリクエストの送信を遅らせるにはどうすればよいですか?

分類Dev

akka httpのPOSTリクエストに再試行を追加するにはどうすればよいですか?

分類Dev

成功するまでセロリにリクエストを再試行させるにはどうすればよいですか?

分類Dev

TestSchedulerにRxJs5をチェックさせるにはどうすればよいですか?

分類Dev

Unityでシーンを切り替えるためのスクリプトを遅らせるにはどうすればよいですか?

分類Dev

IntegrationFlowからHTTPリクエストを送信するにはどうすればよいですか?

分類Dev

Pythonリクエストを使用して別のプロキシ経由で接続を再試行するにはどうすればよいですか?

分類Dev

Python zeepで再試行処理を取得するにはどうすればよいですか?リクエストの再試行セッションを使用していますが、例外が処理されません

分類Dev

非同期フェッチリクエストを実行してから、最後に失敗したリクエストを再試行するにはどうすればよいですか?

分類Dev

リクエストを自動的に再試行するためのhttpコードは何ですか?

分類Dev

JavaScript:クエリ文字列を追加せずに画像の読み込みを再試行するにはどうすればよいですか?

分類Dev

送信時にPythonスクリプトを実行するためのHTMLを取得するにはどうすればよいですか?

分類Dev

PythonでHTTP Get Webリクエストを送信するにはどうすればよいですか?

分類Dev

PythonでHTTP Get Webリクエストを送信するにはどうすればよいですか?

分類Dev

Python 2でHEAD HTTPリクエストを送信するにはどうすればよいですか?

分類Dev

PHPでHTTP / 2POSTリクエストを送信するにはどうすればよいですか

分類Dev

HTTPリクエストでバッファを送信するにはどうすればよいですか?

分類Dev

HTTP getリクエストで認証キーを送信するにはどうすればよいですか?

分類Dev

.NETからのHTTPリクエストを中止するにはどうすればよいですか?

分類Dev

失敗したテストを再試行するにはどうすればよいですか?

分類Dev

再試行メカニズムをPythonリクエストライブラリに実装するにはどうすればよいですか?

分類Dev

rxjsを使用して、既存のリクエストが完了するのを待ってから最新のリクエストのみを送信するようにHTTPリクエストをキューに入れるにはどうすればよいですか?

分類Dev

Laravelのチャンク機能を使用しながらスクリプトの実行を遅らせるにはどうすればよいですか?

分類Dev

iPadから行われたHTTPリクエストをリダイレクトするにはどうすればよいですか?

分類Dev

RxJS5で時限背圧を適用するにはどうすればよいですか?

分類Dev

Jmeterを使用して120リクエストのRPSで5分以内に36000リクエストを送信するにはどうすればよいですか?

分類Dev

PHPからGETリクエストを送信するにはどうすればよいですか?

分類Dev

Haxe / NekoからHTTPPUTリクエストを送信するにはどうすればよいですか?

Related 関連記事

  1. 1

    送信されたすべてのHTTPリクエストをカウントし、再試行するにはどうすればよいですか?

  2. 2

    ajaxリクエストの送信を遅らせるにはどうすればよいですか?

  3. 3

    akka httpのPOSTリクエストに再試行を追加するにはどうすればよいですか?

  4. 4

    成功するまでセロリにリクエストを再試行させるにはどうすればよいですか?

  5. 5

    TestSchedulerにRxJs5をチェックさせるにはどうすればよいですか?

  6. 6

    Unityでシーンを切り替えるためのスクリプトを遅らせるにはどうすればよいですか?

  7. 7

    IntegrationFlowからHTTPリクエストを送信するにはどうすればよいですか?

  8. 8

    Pythonリクエストを使用して別のプロキシ経由で接続を再試行するにはどうすればよいですか?

  9. 9

    Python zeepで再試行処理を取得するにはどうすればよいですか?リクエストの再試行セッションを使用していますが、例外が処理されません

  10. 10

    非同期フェッチリクエストを実行してから、最後に失敗したリクエストを再試行するにはどうすればよいですか?

  11. 11

    リクエストを自動的に再試行するためのhttpコードは何ですか?

  12. 12

    JavaScript:クエリ文字列を追加せずに画像の読み込みを再試行するにはどうすればよいですか?

  13. 13

    送信時にPythonスクリプトを実行するためのHTMLを取得するにはどうすればよいですか?

  14. 14

    PythonでHTTP Get Webリクエストを送信するにはどうすればよいですか?

  15. 15

    PythonでHTTP Get Webリクエストを送信するにはどうすればよいですか?

  16. 16

    Python 2でHEAD HTTPリクエストを送信するにはどうすればよいですか?

  17. 17

    PHPでHTTP / 2POSTリクエストを送信するにはどうすればよいですか

  18. 18

    HTTPリクエストでバッファを送信するにはどうすればよいですか?

  19. 19

    HTTP getリクエストで認証キーを送信するにはどうすればよいですか?

  20. 20

    .NETからのHTTPリクエストを中止するにはどうすればよいですか?

  21. 21

    失敗したテストを再試行するにはどうすればよいですか?

  22. 22

    再試行メカニズムをPythonリクエストライブラリに実装するにはどうすればよいですか?

  23. 23

    rxjsを使用して、既存のリクエストが完了するのを待ってから最新のリクエストのみを送信するようにHTTPリクエストをキューに入れるにはどうすればよいですか?

  24. 24

    Laravelのチャンク機能を使用しながらスクリプトの実行を遅らせるにはどうすればよいですか?

  25. 25

    iPadから行われたHTTPリクエストをリダイレクトするにはどうすればよいですか?

  26. 26

    RxJS5で時限背圧を適用するにはどうすればよいですか?

  27. 27

    Jmeterを使用して120リクエストのRPSで5分以内に36000リクエストを送信するにはどうすればよいですか?

  28. 28

    PHPからGETリクエストを送信するにはどうすればよいですか?

  29. 29

    Haxe / NekoからHTTPPUTリクエストを送信するにはどうすればよいですか?

ホットタグ

アーカイブ