2
2
import { isThenable } from './is' ;
3
3
4
4
/** SyncPromise internal states */
5
- const enum States {
6
- /** Pending */
7
- PENDING = 0 ,
8
- /** Resolved / OK */
9
- RESOLVED = 1 ,
10
- /** Rejected / Error */
11
- REJECTED = 2 ,
12
- }
5
+ const STATE_PENDING = 0 ;
6
+ const STATE_RESOLVED = 1 ;
7
+ const STATE_REJECTED = 2 ;
8
+
9
+ type State = typeof STATE_PENDING | typeof STATE_RESOLVED | typeof STATE_REJECTED ;
13
10
14
11
// Overloads so we can call resolvedSyncPromise without arguments and generic argument
15
12
export function resolvedSyncPromise ( ) : PromiseLike < void > ;
@@ -46,12 +43,12 @@ type Executor<T> = (resolve: (value?: T | PromiseLike<T> | null) => void, reject
46
43
* but is not async internally
47
44
*/
48
45
export class SyncPromise < T > implements PromiseLike < T > {
49
- private _state : States ;
46
+ private _state : State ;
50
47
private _handlers : Array < [ boolean , ( value : T ) => void , ( reason : any ) => any ] > ;
51
48
private _value : any ;
52
49
53
50
public constructor ( executor : Executor < T > ) {
54
- this . _state = States . PENDING ;
51
+ this . _state = STATE_PENDING ;
55
52
this . _handlers = [ ] ;
56
53
57
54
this . _runExecutor ( executor ) ;
@@ -135,7 +132,7 @@ export class SyncPromise<T> implements PromiseLike<T> {
135
132
136
133
/** Excute the resolve/reject handlers. */
137
134
private _executeHandlers ( ) : void {
138
- if ( this . _state === States . PENDING ) {
135
+ if ( this . _state === STATE_PENDING ) {
139
136
return ;
140
137
}
141
138
@@ -147,11 +144,11 @@ export class SyncPromise<T> implements PromiseLike<T> {
147
144
return ;
148
145
}
149
146
150
- if ( this . _state === States . RESOLVED ) {
147
+ if ( this . _state === STATE_RESOLVED ) {
151
148
handler [ 1 ] ( this . _value as unknown as any ) ;
152
149
}
153
150
154
- if ( this . _state === States . REJECTED ) {
151
+ if ( this . _state === STATE_REJECTED ) {
155
152
handler [ 2 ] ( this . _value ) ;
156
153
}
157
154
@@ -161,8 +158,8 @@ export class SyncPromise<T> implements PromiseLike<T> {
161
158
162
159
/** Run the executor for the SyncPromise. */
163
160
private _runExecutor ( executor : Executor < T > ) : void {
164
- const setResult = ( state : States , value ?: T | PromiseLike < T > | any ) : void => {
165
- if ( this . _state !== States . PENDING ) {
161
+ const setResult = ( state : State , value ?: T | PromiseLike < T > | any ) : void => {
162
+ if ( this . _state !== STATE_PENDING ) {
166
163
return ;
167
164
}
168
165
@@ -178,11 +175,11 @@ export class SyncPromise<T> implements PromiseLike<T> {
178
175
} ;
179
176
180
177
const resolve = ( value : unknown ) : void => {
181
- setResult ( States . RESOLVED , value ) ;
178
+ setResult ( STATE_RESOLVED , value ) ;
182
179
} ;
183
180
184
181
const reject = ( reason : unknown ) : void => {
185
- setResult ( States . REJECTED , reason ) ;
182
+ setResult ( STATE_REJECTED , reason ) ;
186
183
} ;
187
184
188
185
try {
0 commit comments