リトライとバックオフのパターン
失敗する非同期処理を遅延を挟んで数回リトライし、指数バックオフと小さなジッターを追加します。明確な最大回数で停止します。
「リトライとバックオフのパターン」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全3レッスンが含まれています。
なぜ再試行するのか
目標:小規模で制御しやすい再試行を追加します。
- シンプルな再試行ループ
- 指数バックオフ
- 小さなジッター
- 最大試行回数を明確にする

遅延ヘルパー
試行の間に一時停止するための小さな遅延ヘルパーが必要です。
// delay: resolve after ms
function delay(ms) {
return new Promise(function (resolve) {
setTimeout(function () { resolve(); }, ms);
});
}
async function demoDelay() {
console.log("wait...");
await delay(5);
console.log("done");
}
demoDelay();

不安定な処理を偽装する
この偽のタスクを使うと、実際のネットワーク呼び出しなしで再試行を練習できます。
// Unstable task: fails first N times, then succeeds
function makeUnstable(failCount, value) {
let left = failCount;
return async function run() {
if (left > 0) {
left = left - 1;
throw new Error("temporary");
}
return value;
};
}
const sometimes = makeUnstable(2, "OK");
sometimes().catch(function (e) { console.log("first:", e.message); });

固定再試行ループ
固定間隔:試行の間に毎回同じ時間だけ待ち、最大試行回数に達したら停止します。
// Retry a few times with a fixed wait
async function retryFixed(fn, tries, waitMs) {
let lastError = null;
for (let i = 1; i <= tries; i++) {
try {
return await fn();
} catch (e) {
lastError = e;
console.log("attempt", i, "failed:", e.message);
if (i < tries) {
await delay(waitMs);
}
}
}
throw lastError;
}
(async function () {
const job = makeUnstable(2, "OK");
const result = await retryFixed(job, 3, 5);
console.log("fixed result:", result);
})();

指数バックオフ
バックオフ:試行するたびに待ち時間を増やし、急増を避けるために小さなジッターを加えます。
// Exponential backoff with a tiny jitter
function jitter(ms) {
const wiggle = Math.floor(Math.random() * 3); // 0..2
return ms + wiggle;
}
async function retryBackoff(fn, tries, baseMs) {
let lastError = null;
for (let i = 1; i <= tries; i++) {
try {
return await fn();
} catch (e) {
lastError = e;
console.log("attempt", i, "failed:", e.message);
if (i < tries) {
const wait = jitter(baseMs * Math.pow(2, i - 1));
await delay(wait);
}
}
}
throw lastError;
}
(async function () {
const job = makeUnstable(2, "OK");
const value = await retryBackoff(job, 4, 3);
console.log("backoff result:", value);
})();

再試行のヒント
ヒント:
- 一時的なエラー(タイムアウトやレート制限)の場合にのみ再試行します。
- 入力が不正な場合は再試行しないでください。
- 試行回数は少なく(3~5回)し、失敗は簡潔にログへ記録します。

再試行とバックオフのクイズ
簡単な確認:バックオフの基礎です。

まとめ
まとめ:固定再試行ループを作成し、小さなジッターを加えた指数バックオフを実装しました。また、アプリの応答性を保つために最大試行回数を設定しました。

よくある質問
「リトライとバックオフのパターン」レッスンは無料ですか?
はい。「リトライとバックオフのパターン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全3レッスンが含まれています。
「リトライとバックオフのパターン」で何を学びますか?
失敗する非同期処理を遅延を挟んで数回リトライし、指数バックオフと小さなジッターを追加します。明確な最大回数で停止します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
JavaScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。
「リトライとバックオフのパターン」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJavaScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- async関数の作成、try/catch、並列処理と逐次処理
- AbortControllerによるタイムアウトと中止
- リトライとバックオフのパターン