const pending = 'pending'
const fulfilled = 'fulfilled'
const rejected = 'rejected'
class PromiseHandle {
constructor(executor) {
// 立即调用函数
try {
executor(this.resolve, this.reject)
} catch (err) {
this.reject(err)
}
}
status = pending
success = undefined
error = undefined
resolveCallback = []
rejectCallback = []
resolve = success => {
if (this.status != pending) return
this.success = success;
this.status = fulfilled
this.resolveCallback.forEach(callback => {
callback(this.success)
})
}
reject = error => {
if (this.status != pending) return
this.error = error;
this.status = rejected
this.rejectCallback.forEach(callback => {
callback(this.error)
})
}
then(onResolved, onRejected) {
if (this.status === fulfilled) {
onResolved(this.success)
}
if (this.status === rejected) {
onRejected(this.error)
}
if (this.status === pending) {
this.resolveCallback.push(onResolved)
this.rejectCallback.push(onRejected)
}
}
catch(onRejected) {
onRejected(this.error)
}
}
let ph1 = new PromiseHandle((resolve, reject) => {
resolve('success1')
// reject('error1')
})
ph1.then(res => {
console.log(res)
}, error => {
console.log(error)
})
es6手写promise
最新推荐文章于 2023-02-01 11:22:55 发布
本文介绍了PromiseHandle类,展示了如何创建、状态转换及使用then和catch方法处理异步操作。重点在于理解pending、fulfilled和rejected状态,以及如何通过回调函数处理成功和错误情况。
摘要由CSDN通过智能技术生成