@deno/kv
Version:
A Deno KV client library optimized for Node.js.
34 lines (33 loc) • 982 B
JavaScript
// 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);
}
}