@naturalcycles/js-lib
Version:
Standard library for universal (browser + Node.js) javascript
42 lines (41 loc) • 1.2 kB
JavaScript
;
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;
}