UNPKG

@deno/kv

Version:

A Deno KV client library optimized for Node.js.

40 lines (39 loc) 1.23 kB
"use strict"; // Copyright 2023 the Deno authors. All rights reserved. MIT license. Object.defineProperty(exports, "__esModule", { value: true }); exports.RetryableError = exports.executeWithRetries = exports.sleep = void 0; function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } exports.sleep = sleep; async function executeWithRetries(tag, fn, opts = {}) { const { maxRetries = 10, isRetryable = (e) => e instanceof RetryableError } = opts; let retries = 0; while (true) { try { if (retries > 0) { const waitMillis = retries * 1000; await sleep(waitMillis); } return await fn(); } catch (e) { if (isRetryable(e)) { if (retries >= maxRetries) { throw new Error(`${tag}: Out of retries (max=${maxRetries}): ${e.stack || e}`); } retries++; } else { throw e; } } } } exports.executeWithRetries = executeWithRetries; class RetryableError extends Error { constructor(message) { super(message); } } exports.RetryableError = RetryableError;