function MyPromise(excutor) {
const self = this;
this.status = "pending";
self.val = null;
self.reason = null;
self.fulfilledQueue = [];
self.rejectedQueue = [];
function _resolve(val) {
if (self.status === "pending") {
self.status = "fulfilled";
self.val = val;
if (val instanceof MyPromise) {
val.then((_val) => {
self.val = _val;
self.status = "fulfilled";
let cb;
while ((cb = self.fulfilledQueue.shift())) {
cb(_val);
}
});
} else {
console.log(self.fulfilledQueue.length);
let cb;
while ((cb = self.fulfilledQueue.shift())) {
console.log("ssssss");
cb(val);
}
}
}
}
function _reject(reason) {
if (self.status === "pending") {
self.status = "rejected";
self.reason = reason;
while ((cb = self.rejectedQueue.shift())) {
console.log("ssssss");
cb(reason);
}
}
}
excutor(_resolve, _reject);
}
MyPromise.prototype.then = function (onFulfilled, onRejected) {
const _this = this;
const promise2 = new MyPromise((resolve, reject) => {
onFulfilled =
typeof onFulfilled == "function"
? onFulfilled
: function (data) {
return resolve(data);
};
onRejected =
typeof onRejected == "function"
? onRejected
: function (err) {
throw err;
};
if (_this.status === "pending") {
_this.fulfilledQueue.push((value) => {
resolve(onFulfilled(value));
});
_this.rejectedQueue.push(onRejected);
}
if (_this.status === "fulfilled") {
console.log("11111");
const res = onFulfilled(this.value);
if (res instanceof MyPromise) {
res.then(resolve, reject);
} else {
resolve(res);
}
}
});
return promise2;
};
const demo = new MyPromise((resolve, reject) => {
setTimeout(() => {
resolve("myPromise");
}, 2000);
});
demo.then((res) => {
console.log(res);
})
.then(() => {
console.log("wlejlejl");
})
.then(() => {
console.log("pppppppppppppp");
});