metautil
Version:
Metarhia utilities
41 lines (34 loc) • 1.1 kB
JavaScript
;
const { Error } = require('./error.js');
const toBool = [() => true, () => false];
const timeout = (msec, signal = null) =>
new Promise((resolve, reject) => {
const timer = setTimeout(() => {
reject(new Error(`Timeout of ${msec}ms reached`, 'ETIMEOUT'));
}, msec);
if (!signal) return;
signal.addEventListener('abort', () => {
clearTimeout(timer);
reject(new Error('Timeout aborted'));
});
});
const delay = (msec, signal = null) =>
new Promise((resolve, reject) => {
const timer = setTimeout(resolve, msec);
if (!signal) return;
signal.addEventListener('abort', () => {
clearTimeout(timer);
reject(new Error('Delay aborted'));
});
});
const timeoutify = (promise, msec) =>
new Promise((resolve, reject) => {
let timer = setTimeout(() => {
timer = null;
reject(new Error(`Timeout of ${msec}ms reached`, 'ETIMEOUT'));
}, msec);
promise.then(resolve, reject).finally(() => {
if (timer) clearTimeout(timer);
});
});
module.exports = { toBool, timeout, delay, timeoutify };