INTEGRITY Документация

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

Стоит повторять запросы на запись из приложения при возникновении временной ошибка. Из списка 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;
}