const PEDDING = 'PEDDING';const RESOLVE = 'RESOLVE';const REJECT = 'REJECT';// promise 有三种状态class NewPromise {// 初始状态为 PEDDING status = PEDDING result = undefined; reason = undefined; // 公布订阅者模式 // 目标是为了实现异步 onResolveArr = []; onRejectArr = []; constructor(exc) { const resolve = result => { if (this.status === PEDDING) { this.result = result this.status = RESOLVE // 执行订阅者 this.onResolveArr.map(fn => fn()) } } const reject = reason => { if (this.status === PEDDING) { this.reason = reason this.status = REJECT // 执行订阅者 this.onRejectArr.map(fn => fn()) } } exc(resolve, reject) } then(onResolve, onReject) { if (this.status === RESOLVE) { setTimeout(() => { onResolve(this.result) }, 0) } if (this.status === REJECT) { setTimeout(() => { onReject(this.reason) }, 0) } // 公布订阅者模式 if (this.status === PEDDING) { // 将发布者增加到数组外面 this.onResolveArr.push(() => { onResolve(this.result) }) this.onRejectArr.push(() => { this.onReject(this.reason) }) } }}// let yan = new Promise((resole, reject) => {// resole('闫大爷真帅')// })// yan.then(res => {// console.log(res)// })let newYan = new NewPromise((resole, reject) => { setTimeout(()=>{ resole('new闫大爷真帅') },3000) })newYan.then(res => { console.log(res)})console.log(11111111)