记录贴
// 手写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) })
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。