手写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) })