Googleの方が社内のチームで新しいWeb関連仕様について議論する際に、explainers-by-googlersオーガニゼーションにexplainerという説明文書が書かれる。
そこに、fetchがネットワークエラーなどで失敗した際に再試行を行うようにするretryOptionsというExpainerが公開されています。まだ公式の情報は出てないので、どういう位置づけのものか分からないが見ておく。
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