UNPKG

@naturalcycles/js-lib

Version:

Standard library for universal (browser + Node.js) javascript

42 lines (41 loc) 1.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pDelay = pDelay; exports.pDelayFn = pDelayFn; const pDefer_1 = require("./pDefer"); /** * Promisified version of setTimeout. * * Can return a value. * If value is instanceof Error - rejects the Promise instead of resolving. */ async function pDelay(ms = 0, value) { return await new Promise((resolve, reject) => setTimeout(value instanceof Error ? reject : resolve, ms, value)); } /* eslint-disable @typescript-eslint/promise-function-async */ /** * Promisified version of setTimeout. * * Wraps the passed function with try/catch, * catch will propagate to pDelayFn rejection, * otherwise pDelayFn will resolve with returned value. * * On abort() - clears the Timeout and immediately resolves the Promise with void. */ function pDelayFn(ms, fn) { const p = (0, pDefer_1.pDefer)(); const timer = setTimeout(async () => { try { p.resolve(await fn()); } catch (err) { p.reject(err); } }, ms); p.abort = () => { clearTimeout(timer); // p.rejectAborted(reason) // nope p.resolve(); }; return p; }