diff --git a/index.js b/index.js index 59d6c84..eed69ac 100644 --- a/index.js +++ b/index.js @@ -1,41 +1,57 @@ function myPromise(constructor) { let self = this; - self.status = "pending" //定义状态改变前的初始状态 + self.status = "pending"; //定义状态改变前的初始状态 - self.value = undefined;//定义状态为resolved的时候的状态 + self.value = undefined; //定义状态为resolved的时候的状态 - self.reason = undefined;//定义状态为rejected的时候的状态 + self.reason = undefined; //定义状态为rejected的时候的状态 - function resolve(value) { + self.fulfillTasks = []; + + self.rejectTasks = []; - // TODO resolve如何改变状态及返回结果 + function resolve(value) { + if (self.status !== "pending") return; + self.status = "fulfilled"; + self.value = value; + self.fulfillTasks.forEach((fn) => fn()); } function reject(reason) { + if (self.status !== "pending") return; - // TODO reject如何改变状态及返回结果 - + self.status = "rejected"; + self.reason = reason; + self.rejectTasks.forEach((fn) => fn()); } //捕获构造异常 try { - constructor(resolve, reject); - } catch (e) { - reject(e); - } - } myPromise.prototype.then = function (onFullfilled, onRejected) { + // skip creating new promise + if (this.status === "fulfilled") { + onFullfilled(this.value); + } else if (this.status === "rejected") { + onRejected(this.reason); + } - //TODO then如何实现 + if (this.status === "pending") { + this.fulfillTasks.push(() => { + onFullfilled(this.value); + }); -} -module.exports = myPromise + this.rejectTasks.push(() => { + onRejected(this.reason); + }); + } +}; +module.exports = myPromise;