src/global/promise-with-timeout.ts (17 lines of code) (raw):

// Useful for using fetch with timeout // https://github.com/github/fetch/issues/175#issuecomment-284787564 export interface PromiseWithTimeoutConfig { error?: Error | null | undefined; onTimeout?: () => void | undefined; } export default function promiseWithTimeout<T>( promise: Promise<T>, timeout: number, {error, onTimeout = () => {}}: PromiseWithTimeoutConfig, ) { return new Promise((resolve, reject) => { setTimeout(() => { onTimeout(); reject(error || new Error('Timeout')); }, timeout); promise.then(resolve, reject); }); }