手写Promise
1.promise是手写异步代码的另一种方式,主要用于解决回调嵌套问题
2.promise提供两个参数resolve(成功时调用的函数),reject(失败时调用的参数),它们是promise内部实现好的函数
3.promise有三种状态,pending 等待,fulfilled成功,rejected失败
4.resolve时,将promise的状态从pending改为fulfilled
5.reject时,将promise的状态从pending改为rejected
6.promise是一个类
class Promise {
//立刻执行
constructor(executor) {
this.state = 'pending' // 初始化state为等待状态
this.value = undefined //记录成功的值
this.reason = undefined // 记录失败的值
// 只有状态为pending的时候才能被改变状态
// 在new Promise的时候,可以同时调用多个函数,但是只会执行第一个
let resolve = (value) => {
if (this.state === 'pending') {
this.state = 'fulfilled' // 更新状态
}
this.value = value ///记录成功信息
// console.log('将状态改为成功,记录成功的信息')
}
let reject = (reason) => {
if (this.state === 'pending') {
this.state = 'rejected' // 更新状态
}
this.reason = reason //记录失败的信息
// console.log('将状态改为失败,记录失败的信息')
}
// 如果执行executor报错,直接reject
try {
executor(resolve, reject)
} catch {
reject()
}
}
then(onFulfilled, onRejected) {
// 成功调用 onFulfilled 失败调用onRejected 根据state来进行区分
if (this.state === 'fulfilled') {
onFulfilled(this.value)
}
if (this.state === 'rejected') {
onRejected(this.reason)
}
}
}
const p = new Promise((resolve, reject) => {
resolve('成功的传值')
// reject('失败的传值')
})
// 在类中,给原型加一个then方法
p.then(res => {
console.log(res)
})

浙公网安备 33010602011771号