@cloudcome/utils-core
Version:
cloudcome core utils
63 lines (62 loc) • 1.46 kB
JavaScript
import { isPromise, isObject } from "./type.mjs";
function isPromiseLike(unknown) {
return isPromise(unknown) || 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);
}
};
}
export {
createMinDelayPromise,
isPromiseLike,
promiseDelay,
promiseShared,
promiseTimeout,
promiseWhen
};
//# sourceMappingURL=promise.mjs.map