@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.
52 lines • 1.42 kB
JavaScript
/**
* @module Async
*/
import { AbortAsyncError } from "../../../async/async.errors.js";
/**
* @internal
*/
function abortSignalToPromise(abortSignal, createError) {
let reject_ = null;
function abort() {
if (reject_ === null) {
return;
}
reject_(createError(abortSignal.reason));
}
if (abortSignal.aborted) {
return {
promise: Promise.reject(createError(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) {
const createError = (reason) => new AbortAsyncError(`Promise was aborted with reason of "${String(reason)}"`, reason);
if (abortSignal.aborted) {
throw createError(abortSignal.reason);
}
const { promise: abortSignalPromise, abort } = abortSignalToPromise(abortSignal, createError);
try {
return await Promise.race([promise, abortSignalPromise]);
}
finally {
abortSignal.removeEventListener("abort", abort);
}
}
//# sourceMappingURL=abort-and-fail.js.map