@@ -577,6 +577,7 @@ export const createAsyncThunk = /* @__PURE__ */ (() => {
577
577
: nanoid ( )
578
578
579
579
const abortController = new AbortController ( )
580
+ let abortHandler : ( ( ) => void ) | undefined
580
581
let abortReason : string | undefined
581
582
582
583
function abort ( reason ?: string ) {
@@ -600,14 +601,15 @@ export const createAsyncThunk = /* @__PURE__ */ (() => {
600
601
}
601
602
}
602
603
603
- const abortedPromise = new Promise < never > ( ( _ , reject ) =>
604
- abortController . signal . addEventListener ( 'abort' , ( ) =>
604
+ const abortedPromise = new Promise < never > ( ( _ , reject ) => {
605
+ abortHandler = ( ) => {
605
606
reject ( {
606
607
name : 'AbortError' ,
607
608
message : abortReason || 'Aborted' ,
608
609
} )
609
- )
610
- )
610
+ }
611
+ abortController . signal . addEventListener ( 'abort' , abortHandler )
612
+ } )
611
613
dispatch (
612
614
pending (
613
615
requestId ,
@@ -653,6 +655,10 @@ export const createAsyncThunk = /* @__PURE__ */ (() => {
653
655
err instanceof RejectWithValue
654
656
? rejected ( null , requestId , arg , err . payload , err . meta )
655
657
: rejected ( err as any , requestId , arg )
658
+ } finally {
659
+ if ( abortHandler ) {
660
+ abortController . signal . removeEventListener ( 'abort' , abortHandler )
661
+ }
656
662
}
657
663
// We dispatch the result action _after_ the catch, to avoid having any errors
658
664
// here get swallowed by the try/catch block,
0 commit comments