Документация Запланировать пилот

Повтор запросов

Стоит повторять запросы на запись из приложения при возникновении временной ошибка. Из списка D1_ERROR, чтобы определить, следует ли повторить запрос, см. столбец Recommended action.

Пример повторных попыток выполнения запросов

Рассмотрите следующий пример shouldRetry(...) функция, взятая из стартовый шаблон репликации для чтения D1 ↗.

Убедитесь, что повторные попытки используют стратегию экспоненциальной задержки со случайным разбросом (jitter) для повышения их успешности. Для этого можно использовать готовые библиотеки, например @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;
}

Запросите бесплатный пилот

Запланировать пилот