export interface ITask { (): T; } export async function retry(task: ITask>, delay: number, retries: number): Promise { let lastError: Error | undefined; for (let i = 0; i < retries; i++) { try { return await task(); } catch (error) { lastError = error; await new Promise(resolve => setTimeout(() => resolve(), delay)); } } throw lastError; }