@@ -14,7 +14,6 @@ import {
14
14
FailJobFunction ,
15
15
GetJobFunction ,
16
16
Job ,
17
- PromiseOrDirect ,
18
17
RunOnceOptions ,
19
18
TaskList ,
20
19
WorkerEventMap ,
@@ -589,7 +588,7 @@ export function _runTaskList(
589
588
unregisterSignalHandlers = registerSignalHandlers ( logger , events ) ;
590
589
}
591
590
592
- const promise = defer ( ) ;
591
+ const _finPromise = defer ( ) ;
593
592
594
593
let deactivatePromise : Promise < void > | null = null ;
595
594
@@ -671,21 +670,14 @@ export function _runTaskList(
671
670
} catch ( e ) {
672
671
errors . push ( coerceError ( e ) ) ;
673
672
}
673
+
674
674
if ( errors . length === 1 ) {
675
- promise . reject ( errors [ 0 ] ) ;
675
+ throw errors [ 0 ] ;
676
676
} else if ( errors . length > 1 ) {
677
- promise . reject (
678
- new AggregateError (
679
- errors ,
680
- "Errors occurred whilst terminating queue" ,
681
- ) ,
677
+ throw new AggregateError (
678
+ errors ,
679
+ "Errors occurred whilst terminating queue" ,
682
680
) ;
683
- } else {
684
- promise . resolve ( ) ;
685
- }
686
-
687
- if ( unregisterSignalHandlers ) {
688
- unregisterSignalHandlers ( ) ;
689
681
}
690
682
} else {
691
683
try {
@@ -710,8 +702,22 @@ export function _runTaskList(
710
702
// Make sure Node doesn't get upset about unhandled rejection
711
703
abortPromise . then ( null , ( ) => /* noop */ void 0 ) ;
712
704
713
- let gracefulShutdownPromise : PromiseOrDirect < void > ;
714
- let forcefulShutdownPromise : PromiseOrDirect < void > ;
705
+ let gracefulShutdownPromise : Promise < void > | null = null ;
706
+ let forcefulShutdownPromise : Promise < void > | null = null ;
707
+
708
+ const finWithError = ( e : unknown ) => {
709
+ const error = e != null ? coerceError ( e ) : null ;
710
+ if ( error ) {
711
+ _finPromise . reject ( error ) ;
712
+ } else {
713
+ _finPromise . resolve ( ) ;
714
+ }
715
+
716
+ if ( unregisterSignalHandlers ) {
717
+ unregisterSignalHandlers ( ) ;
718
+ }
719
+ } ;
720
+ const fin = ( ) => finWithError ( null ) ;
715
721
716
722
// This is a representation of us that can be interacted with externally
717
723
const workerPool : WorkerPool = {
@@ -752,13 +758,13 @@ export function _runTaskList(
752
758
logger . error (
753
759
`gracefulShutdown called when forcefulShutdown is already in progress` ,
754
760
) ;
755
- return forcefulShutdownPromise ;
761
+ return forcefulShutdownPromise ! ;
756
762
}
757
763
if ( workerPool . _shuttingDown ) {
758
764
logger . error (
759
765
`gracefulShutdown called when gracefulShutdown is already in progress` ,
760
766
) ;
761
- return gracefulShutdownPromise ;
767
+ return gracefulShutdownPromise ! ;
762
768
}
763
769
764
770
workerPool . _shuttingDown = true ;
@@ -876,7 +882,7 @@ export function _runTaskList(
876
882
// NOTE: we now rely on forcefulShutdown to handle terminate()
877
883
if ( this . _forcefulShuttingDown ) {
878
884
// Skip the warning about double shutdown
879
- return forcefulShutdownPromise ;
885
+ return forcefulShutdownPromise ! ;
880
886
} else {
881
887
return this . forcefulShutdown ( message ) ;
882
888
}
@@ -887,6 +893,8 @@ export function _runTaskList(
887
893
} ,
888
894
) ;
889
895
896
+ gracefulShutdownPromise . then ( fin , finWithError ) ;
897
+
890
898
const abortTimer = setTimeout ( ( ) => {
891
899
abortController . abort ( ) ;
892
900
} , gracefulShutdownAbortTimeout ) ;
@@ -903,7 +911,7 @@ export function _runTaskList(
903
911
logger . error (
904
912
`forcefulShutdown called when forcefulShutdown is already in progress` ,
905
913
) ;
906
- return forcefulShutdownPromise ;
914
+ return forcefulShutdownPromise ! ;
907
915
}
908
916
909
917
workerPool . _forcefulShuttingDown = true ;
@@ -1000,29 +1008,34 @@ export function _runTaskList(
1000
1008
{ error : e } ,
1001
1009
) ;
1002
1010
if ( ! terminated ) {
1011
+ // Guaranteed to throw
1003
1012
await terminate ( error ) ;
1004
1013
}
1005
- throw e ;
1014
+ throw error ;
1006
1015
}
1007
1016
if ( ! terminated ) {
1017
+ // Guaranteed to throw
1008
1018
await terminate ( new Error ( "Forceful shutdown" ) ) ;
1009
1019
}
1010
1020
} ,
1011
1021
) ;
1012
1022
1023
+ // This should never call fin() since forceful shutdown always errors
1024
+ forcefulShutdownPromise . then ( fin , finWithError ) ;
1025
+
1013
1026
return forcefulShutdownPromise ;
1014
1027
} ,
1015
1028
1016
- promise,
1029
+ promise : _finPromise ,
1017
1030
1018
1031
then ( onfulfilled , onrejected ) {
1019
- return promise . then ( onfulfilled , onrejected ) ;
1032
+ return _finPromise . then ( onfulfilled , onrejected ) ;
1020
1033
} ,
1021
1034
catch ( onrejected ) {
1022
- return promise . catch ( onrejected ) ;
1035
+ return _finPromise . catch ( onrejected ) ;
1023
1036
} ,
1024
1037
finally ( onfinally ) {
1025
- return promise . finally ( onfinally ) ;
1038
+ return _finPromise . finally ( onfinally ) ;
1026
1039
} ,
1027
1040
_start : autostart
1028
1041
? null
@@ -1033,7 +1046,7 @@ export function _runTaskList(
1033
1046
} ,
1034
1047
} ;
1035
1048
1036
- promise . finally ( ( ) => {
1049
+ _finPromise . finally ( ( ) => {
1037
1050
events . emit ( "pool:release" , { pool : workerPool , workerPool } ) ;
1038
1051
} ) ;
1039
1052
0 commit comments