11export class CancelError extends Error {
22 constructor ( message : string ) {
3- super ( message ) ;
4- this . name = "CancelError" ;
3+ super ( message )
4+ this . name = "CancelError"
55 }
66
77 public get isCancelled ( ) : boolean {
8- return true ;
8+ return true
99 }
1010}
1111
1212export interface OnCancel {
13- readonly isResolved : boolean ;
14- readonly isRejected : boolean ;
15- readonly isCancelled : boolean ;
13+ readonly isResolved : boolean
14+ readonly isRejected : boolean
15+ readonly isCancelled : boolean
1616
17- ( cancelHandler : ( ) => void ) : void ;
17+ ( cancelHandler : ( ) => void ) : void
1818}
1919
2020export class CancelablePromise < T > implements Promise < T > {
21- private _isResolved : boolean ;
22- private _isRejected : boolean ;
23- private _isCancelled : boolean ;
24- readonly cancelHandlers : ( ( ) => void ) [ ] ;
25- readonly promise : Promise < T > ;
26- private _resolve ?: ( value : T | PromiseLike < T > ) => void ;
27- private _reject ?: ( reason ?: unknown ) => void ;
21+ private _isResolved : boolean
22+ private _isRejected : boolean
23+ private _isCancelled : boolean
24+ readonly cancelHandlers : ( ( ) => void ) [ ]
25+ readonly promise : Promise < T >
26+ private _resolve ?: ( value : T | PromiseLike < T > ) => void
27+ private _reject ?: ( reason ?: unknown ) => void
2828
2929 constructor (
3030 executor : (
@@ -33,94 +33,94 @@ export class CancelablePromise<T> implements Promise<T> {
3333 onCancel : OnCancel ,
3434 ) => void ,
3535 ) {
36- this . _isResolved = false ;
37- this . _isRejected = false ;
38- this . _isCancelled = false ;
39- this . cancelHandlers = [ ] ;
36+ this . _isResolved = false
37+ this . _isRejected = false
38+ this . _isCancelled = false
39+ this . cancelHandlers = [ ]
4040 this . promise = new Promise < T > ( ( resolve , reject ) => {
41- this . _resolve = resolve ;
42- this . _reject = reject ;
41+ this . _resolve = resolve
42+ this . _reject = reject
4343
4444 const onResolve = ( value : T | PromiseLike < T > ) : void => {
4545 if ( this . _isResolved || this . _isRejected || this . _isCancelled ) {
46- return ;
46+ return
4747 }
48- this . _isResolved = true ;
49- if ( this . _resolve ) this . _resolve ( value ) ;
50- } ;
48+ this . _isResolved = true
49+ if ( this . _resolve ) this . _resolve ( value )
50+ }
5151
5252 const onReject = ( reason ?: unknown ) : void => {
5353 if ( this . _isResolved || this . _isRejected || this . _isCancelled ) {
54- return ;
54+ return
5555 }
56- this . _isRejected = true ;
57- if ( this . _reject ) this . _reject ( reason ) ;
58- } ;
56+ this . _isRejected = true
57+ if ( this . _reject ) this . _reject ( reason )
58+ }
5959
6060 const onCancel = ( cancelHandler : ( ) => void ) : void => {
6161 if ( this . _isResolved || this . _isRejected || this . _isCancelled ) {
62- return ;
62+ return
6363 }
64- this . cancelHandlers . push ( cancelHandler ) ;
65- } ;
64+ this . cancelHandlers . push ( cancelHandler )
65+ }
6666
6767 Object . defineProperty ( onCancel , "isResolved" , {
6868 get : ( ) : boolean => this . _isResolved ,
69- } ) ;
69+ } )
7070
7171 Object . defineProperty ( onCancel , "isRejected" , {
7272 get : ( ) : boolean => this . _isRejected ,
73- } ) ;
73+ } )
7474
7575 Object . defineProperty ( onCancel , "isCancelled" , {
7676 get : ( ) : boolean => this . _isCancelled ,
77- } ) ;
77+ } )
7878
79- return executor ( onResolve , onReject , onCancel as OnCancel ) ;
80- } ) ;
79+ return executor ( onResolve , onReject , onCancel as OnCancel )
80+ } )
8181 }
8282
8383 get [ Symbol . toStringTag ] ( ) {
84- return "Cancellable Promise" ;
84+ return "Cancellable Promise"
8585 }
8686
8787 public then < TResult1 = T , TResult2 = never > (
8888 onFulfilled ?: ( ( value : T ) => TResult1 | PromiseLike < TResult1 > ) | null ,
8989 onRejected ?: ( ( reason : unknown ) => TResult2 | PromiseLike < TResult2 > ) | null ,
9090 ) : Promise < TResult1 | TResult2 > {
91- return this . promise . then ( onFulfilled , onRejected ) ;
91+ return this . promise . then ( onFulfilled , onRejected )
9292 }
9393
9494 public catch < TResult = never > (
9595 onRejected ?: ( ( reason : unknown ) => TResult | PromiseLike < TResult > ) | null ,
9696 ) : Promise < T | TResult > {
97- return this . promise . catch ( onRejected ) ;
97+ return this . promise . catch ( onRejected )
9898 }
9999
100100 public finally ( onFinally ?: ( ( ) => void ) | null ) : Promise < T > {
101- return this . promise . finally ( onFinally ) ;
101+ return this . promise . finally ( onFinally )
102102 }
103103
104104 public cancel ( ) : void {
105105 if ( this . _isResolved || this . _isRejected || this . _isCancelled ) {
106- return ;
106+ return
107107 }
108- this . _isCancelled = true ;
108+ this . _isCancelled = true
109109 if ( this . cancelHandlers . length ) {
110110 try {
111111 for ( const cancelHandler of this . cancelHandlers ) {
112- cancelHandler ( ) ;
112+ cancelHandler ( )
113113 }
114114 } catch ( error ) {
115- console . warn ( "Cancellation threw an error" , error ) ;
116- return ;
115+ console . warn ( "Cancellation threw an error" , error )
116+ return
117117 }
118118 }
119- this . cancelHandlers . length = 0 ;
120- if ( this . _reject ) this . _reject ( new CancelError ( "Request aborted" ) ) ;
119+ this . cancelHandlers . length = 0
120+ if ( this . _reject ) this . _reject ( new CancelError ( "Request aborted" ) )
121121 }
122122
123123 public get isCancelled ( ) : boolean {
124- return this . _isCancelled ;
124+ return this . _isCancelled
125125 }
126126}
0 commit comments