记录贴
// 手写promise function MyPromise(fn){ let _this = this _this.status = "pending" _this.resolve_val = undefined _this.reject_val = undefined _this.resolveCb = [] _this.rejectCb = [] try{ fn(resolve,reject) }catch(e){ reject(e) } function resolve(value){ if(_this.status === "pending"){ _this.status = "resolve" _this.resolve_val = value _this.resolveCb.map(cb=>cb(value)) } } function reject(value){ if(_this.status === "pending"){ _this.status = "reject" _this.reject_val = value _this.rejectCb.map(cb=>cb(value)) } } MyPromise.prototype.then = function(success,fail){ if(_this.status === "pending"){ _this.resolveCb.push(success) _this.rejectCb.push(fail) } if(_this.status === "resolve"){ success(_this.resolve_val) } if(_this.status === "reject"){ fail(_this.resolve_val) } return this } } let p = new MyPromise((resolve,reject)=>{ setTimeout(()=>{ reject("你好") },2000) }) p.then((e)=>{ console.log(e) },(err)=>{ console.log(err) })