跳转到内容
搜索文档

重试查询

最后更新 查看 MarkdownAgent 设置

当遇到瞬时错误时,从应用程序重试写入查询很有用。在 D1_ERROR 列表中,请参阅 Recommended action 列以确定是否应重试查询。

重试查询示例

考虑以下 shouldRetry(...) 函数示例,取自 D1 读复制入门模板

您应确保重试采用带抖动的指数退避策略,以提高重试成功率。 您可以使用已有的抽象库,例如 @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;
}

这篇文档对您有帮助吗?