1.简单了解promise
- 三种状态
- 1.pending : 等待状态
- 2.fulfilled : Promise的异步操作已经成功结束成功
* 3.rejected: Promise的异步操作未成功结束,可能是一个错误,或者其他原因
2.实现
class MyPromise {
static PENDING = 'pending'
static FULFILLED = 'fulfilled'
static REJECTED = 'rejected'
state = MyPromise.PENDING
value
reason
resolveFnList = []
rejectFnList = []
constructor(execute) {
let resolve = value => {
if (this.state === MyPromise.PENDING) {
this.value = value
this.state = MyPromise.FULFILLED
this.resolveFnList.forEach(fn => fn(value))
}
}
let reject = reason => {
if (this.state === MyPromise.PENDING) {
this.reason = reason
this.state = MyPromise.REJECTED
this.rejectFnList.forEach(fn => fn(reason))
}
}
execute(resolve, reject)
}
then(onResolveFn, onRejectFn) {
switch (this.state) {
case MyPromise.FULFILLED:
onResolveFn && onResolveFn(this.value)
break
case MyPromise.REJECTED:
onRejectFn && onRejectFn(this.reason)
break
case MyPromise.PENDING:
onResolveFn && this.resolveFnList.push(onResolveFn)
onRejectFn && this.rejectFnList.push(onRejectFn)
break
}
}
}
let p = new MyPromise((resolve, reject) => {
setTimeout(() => {
resolve(777)
}, 1000)
})
p.then(res => {
console.log(res)
},rej=>{
console.log(rej)
})
完