function Promise(fn) {
var that = this;
this.status = "pedding";
this.value = undefined; // 成功返回值
this.reason = undefined; // 失败返回值
this.onFulfilledArr = []; // 保存成功回调函数
this.onRejectedArr = []; // 保存失败的回调函数 // 成功
function resolve(value) {
if (that.status === "pedding") {
that.value = value;
// 依次执行回调函数
that.onFulfilledArr.forEach(fn => {
return fn(value);
});
that.status = "fulfilled";
}
}
// 失败
function reject(reason) {
if (that.status === "pedding") {
that.reason = reason;
that.onRejectedArr.forEach(fn => {
return fn(season);
});
that.status = "rejected";
}
}
//
fn(resolve, reject);
}
Promise.prototype.then = function(onFulfilled, onRejected) {
// return new Promise(function(resolve, reject) {
// console.log(resolve);
// });
if (this.status === "pedding") {
if (typeof onFulfilled === "function") {
this.onFulfilledArr.push(onFulfilled);
}
}
if (this.status === "pedding") {
if (typeof onRejected === "function") {
this.onRejectedArr.push(onRejected);
}
}
};
var t = new Promise(function(resolve, reject) {
setTimeout(() => {
resolve(2);
}, 500);
});
t.then(data => {
console.log(data);
});

暂未实现then的链式调用

05-11 22:48