手写一个promise

58 阅读1分钟

主要分为7步

1,基础架构 promise的状态、成功回调、失败回调

function myPromise (excutor) { let self = this; self.status = "pending" //状态 self.value = null;//成功 self.reason = null;//失败 //成功回调 function resolve (value) {} // 失败回调 function reject (reason) {} }

2,添加then方法

myPromise.prototype.then = function (onFulflled, onRejected) {}

3,立即执行 立即执行excutor try/catch处理异常

try { excutor(resolve, reject) } catch (err) { reject(err) }

4,状态处理 等待===>成功、失败

if (self.status == "pending") { self.value = value self.status = 'fulflled' } if (self.status == "pending") { self.value = reason self.status = 'rejected' }

5,then 方法 容错处理、状态改变

onFulflled = typeof onFulflled === "function" ? onFulflled : function (data) { resolve(data) } onRejected = typeof onRejected === "function" ? onRejected : function (err) { throw (err) } `if (this.status === 'pending') {

}`

6,发布订阅模式

if (this.status === 'pending') { this.onFulflledCallBakcs.push(onFulflled) this.onRejectedcallBacks.push(onRejected) }

7,状态发生改变调用

self.onFulflledCallBakcs.forEach((item) => item(value)) self.onRejectedcallBacks.forEach((item) => item(value))

完成代码

image.png