@daiso-tech/core
Version:
The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.
51 lines • 1.25 kB
JavaScript
/**
* @module Async
*/
/**
* @internal
*/
function abortSignalToPromise(abortSignal) {
let reject_ = null;
function abort() {
if (reject_ === null) {
return;
}
reject_(abortSignal.reason);
}
if (abortSignal.aborted) {
return {
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
promise: Promise.reject(abortSignal.reason),
abort,
};
}
return {
promise: new Promise((_resolve, reject) => {
reject_ = reject;
if (abortSignal.aborted) {
abort();
return;
}
abortSignal.addEventListener("abort", abort, {
once: true,
});
}),
abort,
};
}
/**
* @internal
*/
export async function abortAndFail(promise, abortSignal) {
if (abortSignal.aborted) {
throw abortSignal.reason;
}
const { promise: abortSignalPromise, abort } = abortSignalToPromise(abortSignal);
try {
return await Promise.race([promise, abortSignalPromise]);
}
finally {
abortSignal.removeEventListener("abort", abort);
}
}
//# sourceMappingURL=abort-and-fail.js.map