Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

クエリを再試行する

最終更新 Markdown で表示Agent セットアップ

アプリケーションから書き込みクエリを実行していて、一時的な エラー に遭遇したときは、再試行するとよいです。D1_ERROR の一覧では、Recommended action 列を見て、そのクエリを再試行すべきかを判断してください。

クエリ再試行の例

次の shouldRetry(...) 関数の例は、D1 read replication starter テンプレート から抜粋しています。

再試行には、成功率を上げるため、ジッター付きの指数バックオフを使ってください。すでに抽象化されているライブラリとして @cloudflare/actors を使うか、再試行ロジック を自分のコードに直接コピーできます。

import { tryWhile } from "@cloudflare/actors";

function queryD1Example(d1: D1Database, sql: string) {
  return await tryWhile(async () => {
    return await d1.prepare(sql).run();
  }, shouldRetry);
}

function shouldRetry(err: unknown, nextAttempt: number) {
  const errMsg = String(err);
  const isRetryableError =
    errMsg.includes("Network connection lost") ||
    errMsg.includes("storage caused object to be reset") ||
    errMsg.includes("reset because its code was updated");
  if (nextAttempt <= 5 && isRetryableError) {
    return true;
  }
  return false;
}

役に立ちましたか?