@dotenvc/async-await
Version:
A minimal utility for Go-style error handling in async/await TypeScript code. Includes retries, custom error handling, and optional logging.
26 lines (25 loc) • 930 B
JavaScript
export async function to(promiseFactory, options = {}) {
const { label = '', retries = 0, delayMs = 100, logger, errorParser = (err) => (err instanceof Error ? err : new Error(String(err))), } = options;
let attempt = 0;
while (attempt <= retries) {
try {
const result = await promiseFactory();
return [null, result];
}
catch (err) {
const parsedError = errorParser(err);
if (attempt < retries) {
if (logger)
logger(`[Retry ${attempt + 1}/${retries}] ${label}`, parsedError);
await new Promise(res => setTimeout(res, delayMs));
}
else {
if (logger)
logger(`[Error] ${label}`, parsedError);
return [parsedError, null];
}
}
attempt++;
}
return [new Error('Unknown failure'), null];
}