UNPKG

@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
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]; }