fetch()失敗時に再試行を行うretryOptionsについて

Googleの方が社内のチームで新しいWeb関連仕様について議論する際に、explainers-by-googlersオーガニゼーションにexplainerという説明文書が書かれる。

そこに、fetchがネットワークエラーなどで失敗した際に再試行を行うようにするretryOptionsというExpainerが公開されています。まだ公式の情報は出てないので、どういう位置づけのものか分からないが見ておく。

github.com

retryOptions

fetch("/api/important-beacon?id=12345",  {
  method:  "GET",
  keepalive:  true, // Essential for retryAfterUnload: true
  retryOptions:  {
    maxAttempts:  3,        // Max 3 retries (4 total attempts)
    initialDelay:  500,    // Start with 500ms delay
    backoffFactor:  2.0, // Double delay each time (500ms, 1s, 2s)
    maxAge:  60000,        // Give up after 60 seconds total retry time
    retryAfterUnload:  true  // Allow retries to continue even if page closes
  }
});
  • maxAttempts: 再試行回数
  • initialDelay: 最初の再試行までの時間(ミリ秒)。
  • backoffFactor: 後続の再試行の遅​​延に適用される乗数
  • maxAge: 再試行を行う時間制限
  • retryAfterUnload: 元のページがunloadされてもリトライを行うか
  • retryNonIdempotent: 非冪等なリクエストの場合、明示的にtrueに設定する必要がある

Promiseは成功したタイミングで解決される。再試行の途中でjavascript側に情報は渡されない

unload後の扱いについて、(今回とユースケースが異なるが) 今までたくさん議論があったので、今後の議論が気になるところ。
blog.jxck.io