1. 程式人生 > 實用技巧 >手寫簡易Promise

手寫簡易Promise

記錄貼

    // 手寫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) })