主要分为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))
完成代码