@@ -104,6 +104,9 @@ export function useScript<T extends Record<symbol | string, any> = Record<symbol
104
104
id,
105
105
status : 'awaitingLoad' ,
106
106
remove ( ) {
107
+ // cancel any pending triggers as we've started loading
108
+ script . _triggerAbortController ?. abort ( )
109
+ script . _triggerPromises = [ ] // clear any pending promises
107
110
if ( script . entry ) {
108
111
script . entry . dispose ( )
109
112
syncStatus ( 'removed' )
@@ -150,22 +153,33 @@ export function useScript<T extends Record<symbol | string, any> = Record<symbol
150
153
script . load ( )
151
154
}
152
155
else if ( trigger instanceof Promise ) {
153
- script . _triggerAbortController = script . _triggerAbortController || new AbortController ( )
154
156
// promise triggers only work client side
155
157
if ( head . ssr ) {
156
158
return
157
159
}
160
+ if ( ! script . _triggerAbortController ) {
161
+ script . _triggerAbortController = new AbortController ( )
162
+ script . _triggerAbortPromise = new Promise < void > ( ( resolve ) => {
163
+ script . _triggerAbortController ! . signal . addEventListener ( 'abort' , ( ) => {
164
+ script . _triggerAbortController = null
165
+ resolve ( )
166
+ } )
167
+ } )
168
+ }
158
169
script . _triggerPromises = script . _triggerPromises || [ ]
159
170
const idx = script . _triggerPromises . push ( Promise . race ( [
160
171
trigger . then ( v => typeof v === 'undefined' || v ? script . load : undefined ) ,
161
- new Promise < void > ( ( resolve ) => {
162
- script . _triggerAbortController ! . signal . addEventListener ( 'abort' , ( ) => resolve ( ) )
163
- } ) ,
164
- ] ) . then ( ( res ) => {
165
- res ?.( )
166
- // remove the promise from the list
167
- script . _triggerPromises ?. splice ( idx , 1 )
168
- } ) )
172
+ script . _triggerAbortPromise ,
173
+ ] )
174
+ // OK
175
+ . catch ( ( ) => { } )
176
+ . then ( ( res ) => {
177
+ res ?.( )
178
+ } )
179
+ . finally ( ( ) => {
180
+ // remove the promise from the list
181
+ script . _triggerPromises ?. splice ( idx , 1 )
182
+ } ) )
169
183
}
170
184
else if ( typeof trigger === 'function' ) {
171
185
trigger ( script . load )
0 commit comments