@darkobits/sleep
Version:
Async wait utility.
45 lines (44 loc) • 1.43 kB
JavaScript
import ms from "ms";
const MAX_SAFE_VALUE = 2147483647;
function parseTime(time) {
const parsedTime = typeof time === "number" ? time : ms(time);
if (parsedTime === void 0) {
throw new Error(`[sleep] Invalid interval: ${time}`);
}
if (parsedTime > MAX_SAFE_VALUE) {
return MAX_SAFE_VALUE;
}
return parsedTime;
}
async function sleep(delay, value) {
if (value instanceof Error) {
await sleep(delay);
throw value;
}
return new Promise((resolve) => {
setTimeout(() => resolve(value), parseTime(delay));
});
}
sleep.sync = (delay, value) => {
if (typeof Atomics === "undefined")
throw new TypeError("[sleep.sync] The Atomics API is not available in this environment.");
if (typeof Atomics.wait === "undefined")
throw new TypeError("[sleep.sync] Atomics.wait is not available in this environment.");
if (typeof Int32Array === "undefined")
throw new TypeError("[sleep.sync] Int32Array is not available in this environment.");
if (typeof SharedArrayBuffer === "undefined")
throw new TypeError("[sleep.sync] SharedArrayBuffer is not available in this environment.");
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, parseTime(delay));
if (value instanceof Error)
throw value;
return value;
};
async function rejectAfter(delay, value) {
await sleep(delay);
throw value;
}
export {
sleep as default,
rejectAfter
};
//# sourceMappingURL=sleep.js.map