@cloudcome/utils-core
Version:
cloudcome core utils
63 lines (62 loc) • 1.67 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const type = require("./type.cjs");
function isPromiseLike(unknown) {
return type.isPromise(unknown) || type.isObject(unknown) && typeof unknown.then === "function";
}
async function promiseDelay(ms = 0, ctrl) {
return new Promise((resolve) => {
const t = setTimeout(resolve, ms);
if (ctrl) {
ctrl.signal.addEventListener("abort", () => {
clearTimeout(t);
resolve();
});
}
});
}
async function promiseTimeout(promise, ms) {
const ctrl = new AbortController();
const result = await Promise.race([
promise,
promiseDelay(ms, ctrl).then(() => {
throw new Error("timeout");
})
]);
ctrl.abort();
return result;
}
function promiseWhen(condition, ms = 10) {
return new Promise((resolve, reject) => {
const check = () => {
if (condition()) {
resolve();
} else {
setTimeout(check, ms);
}
};
check();
});
}
function promiseShared(promise) {
return new Promise((resolve, reject) => {
promise.then(resolve, reject);
});
}
function createMinDelayPromise(ms) {
const startTime = Date.now();
return async function end() {
const endTime = Date.now();
const waitTime = ms - (endTime - startTime);
if (waitTime > 0) {
await promiseDelay(waitTime);
}
};
}
exports.createMinDelayPromise = createMinDelayPromise;
exports.isPromiseLike = isPromiseLike;
exports.promiseDelay = promiseDelay;
exports.promiseShared = promiseShared;
exports.promiseTimeout = promiseTimeout;
exports.promiseWhen = promiseWhen;
//# sourceMappingURL=promise.cjs.map
;