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