简单的实现一个promise
promise允许我们通过链式调用的方式来解决“回调地狱”问题。
(1)术语
promise 是一个对象或者函数,该对象或者函数有一个then方法
thenable是一个对象或者函数,用来定义then方法
value是promise状态成功时的值
reason时promise状态失败时的值
(2)要求
一个promise必须有三个状态:pending、resolved、rejected,状态一旦改变,就不可逆。
一个promise必须有一个then方法,then方法接受两个参数:onResolved、onRejected
为了实现链式调用,then方式必须返回一个promise
无法执行异步操作:
代码:
function myPromise(constructor) {
let self = this;
self.status = "pending" //定义状态改变时的初始位置
self.value = undefined; //定义状态为resolve时的值
self.reason = undefined; //定义状态为rejected时的值
function resolve(value) {
if(self.status === "pending") {
self.value = value;
self.status = "resolved"
}
}
function reject(reason) {
if(self.status === "pending") {
self.reason = reason;
self.status = "rejected"
}
}
//捕获构造异常
try {
constructor(resolve, reject);
} catch(e) {
reject(e)
}
}
//同时需要在myPromise的原型上定义链式调用的then方法
myPromise.prototype.then = (onResolved, onRejected) => {
let self = this;
switch(self.status) {
case "resolved": {
onResolved(self.value);
break;
}
case "rejected": {
onRejected(self.reason);
break
}
default;
}
}

浙公网安备 33010602011771号