Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 7x 7x 7x 2x 2x 2x 2x 1x 2x 1x 1x | import { isError } from './index'; import { purry } from './purry'; /** * Prevents promise to execute longer than X ms * @param fn The function to invoke. * @param maxDuration - Duration in milliseconds * @throws If provided function executes longer than `maxDuration` milliseconds * @signature * P.timeout(fn, milliseconds) * @signature * P.timeout(milliseconds)(fn) * @example * const req = P.timeout(request, 500) * req({ ... }) // Will throw if function executes longer than 500ms * @category Utility, Pipe */ export function timeout<I extends any[], R>( fn: (...args: I) => Promise<R>, maxDuration: number ): (...args: I) => Promise<R>; export function timeout<I extends any[], R>( maxDuration: number ): (fn: (...args: I) => Promise<R>) => (...args: I) => Promise<R>; export function timeout() { return purry(_timeout, arguments); } function _timeout<I extends any[], R>( fn: (...args: I) => Promise<R>, maxDuration: number ): (...args: I) => Promise<R> { return (...args: I) => { return Promise.race([ new Promise<Error>(resolve => { setTimeout(() => { resolve( new Error(`${fn.name} timeout after ${maxDuration}ms`.trim()) ); }, maxDuration); }), fn(...args), ]).then(q => { if (isError(q)) { throw q; } return q as R; }); }; } |