1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

class _Promise {
constructor(exec) {
_STATE_MAP = {
FUlFILLED: 'FULFILLED',
PADDING: 'PADDING',
REJECT: 'REJECT'
}
_value = undefined
_state = _STATE_MAP.PADDING
_fulfilledFuncs = []
_rejectFuncs = []
exec(this.resolve.bind(this), this.reject.bind(this))
}
resolve(val) {
if (this._state === this._STATE_MAP.PADDING) {
this._state = this._STATE_MAP.FUlFILLED
this._value = val
this._fulfilledFuncs.map(it => it(val))
}
}
reject(val) {
if (this._state === this._STATE_MAP.PADDING) {
this._state = this._STATE_MAP.REJECT
this._value = val
this._fulfilledFuncs.forEach(it => it(val))
}
}
then(onFulfilled, onRejected) {
if (this._state === this._STATE_MAP.PADDING) {
onFulfilled instanceof Function
? this._fulfilledFuncs.push(onFulfilled)
: null
onRejected instanceof Function ? this._rejectFuncs.push(onRejected) : null
}
}
}