UNPKG

@deno/kv

Version:

A Deno KV client library optimized for Node.js.

34 lines (33 loc) 982 B
// Copyright 2023 the Deno authors. All rights reserved. MIT license. export function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } export 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; } } } } export class RetryableError extends Error { constructor(message) { super(message); } }