diff --git a/packages/schema/src/script.ts b/packages/schema/src/script.ts index 83c7c10e..6e053fbc 100644 --- a/packages/schema/src/script.ts +++ b/packages/schema/src/script.ts @@ -33,7 +33,11 @@ export interface ScriptInstance { /** * @internal */ - _triggerAbortController?: AbortController + _triggerAbortController?: AbortController | null + /** + * @internal + */ + _triggerAbortPromise?: Promise /** * @internal */ diff --git a/packages/unhead/src/composables/useScript.ts b/packages/unhead/src/composables/useScript.ts index 5eb3c4e2..07f1b287 100644 --- a/packages/unhead/src/composables/useScript.ts +++ b/packages/unhead/src/composables/useScript.ts @@ -104,6 +104,9 @@ export function useScript = Record = Record((resolve) => { + script._triggerAbortController!.signal.addEventListener('abort', () => { + script._triggerAbortController = null + resolve() + }) + }) + } script._triggerPromises = script._triggerPromises || [] const idx = script._triggerPromises.push(Promise.race([ trigger.then(v => typeof v === 'undefined' || v ? script.load : undefined), - new Promise((resolve) => { - script._triggerAbortController!.signal.addEventListener('abort', () => resolve()) - }), - ]).then((res) => { - res?.() - // remove the promise from the list - script._triggerPromises?.splice(idx, 1) - })) + script._triggerAbortPromise, + ]) + // OK + .catch(() => {}) + .then((res) => { + res?.() + }) + .finally(() => { + // remove the promise from the list + script._triggerPromises?.splice(idx, 1) + })) } else if (typeof trigger === 'function') { trigger(script.load)