web-ui-pack
Version:
Web package with UI elements
32 lines (31 loc) • 936 B
JavaScript
export default function promiseWait(promise, ms, smartOrCallback = true) {
let catchErr;
let isResolved = false;
let resCnt = 0;
let back;
promise
.catch((err) => (catchErr = err))
.finally(() => {
isResolved = true;
++resCnt === 2 && back && smartOrCallback(false);
});
const p = new Promise((res, rej) => {
const end = () => {
++resCnt === 2 && back && smartOrCallback(false);
catchErr ? rej(catchErr) : res(promise);
};
const a = setTimeout(end, ms);
smartOrCallback &&
setTimeout(() => {
if (isResolved) {
clearTimeout(a);
end();
}
else if (typeof smartOrCallback === "function") {
smartOrCallback(true);
back = true;
}
});
});
return p;
}