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的链式调用