22:介紹一下 promise,及其底層如何實現(xiàn)

Promise 是一個對象,保存著未來將要結(jié)束的事件,她有兩個特征:

1、對象的狀態(tài)不受外部影響,Promise 對象代表一個異步操作,有三種狀態(tài),pending 進行中,fulfilled 已成功,rejected 已失敗,只有異步操作的結(jié)果,才可以決定當前是哪一種狀態(tài),任何其他操作都無法改變這個狀態(tài),這也就是 promise 名字的由來

2、一旦狀態(tài)改變,就不會再變,promise 對象狀態(tài)改變只有兩種可能,從 pending 改到 fulfilled 或者從 pending 改到 rejected,只要這兩種情況發(fā)生,狀態(tài)就凝固了,不會再改變,這個時候就稱為定型 resolved,

Promise 的基本用法,

let promise1 = new Promise(function(resolve,reject){ 
  setTimeout(function(){ 
    resolve('ok') 
  },1000) 
})
promise1.then(function success(val){ 
  console.log(val) 
})
最簡單代碼實現(xiàn) 
promise class PromiseM { 
  constructor (process) {
    this.status = 'pending' this.msg = '' process(this.resolve.bind(this), 
    this.reject.bind(this)) return this 
  }
  resolve (val) { 
    this.status = 'fulfilled' this.msg = val 
  }
  reject (err) { 
    this.status = 'rejected' 
    this.msg = err 
  }
  then (fufilled, reject) { 
    if(this.status === 'fulfilled') { 
      fufilled(this.msg) 
    }
    if(this.status === 'rejected') { 
      reject(this.msg) 
    }
  }
}
//測試代碼 
var mm=new PromiseM(function(resolve,reject){ 
  resolve('123'); 
}); 
mm.then(function(success){ 
  console.log(success); 
},
function(){ 
  console.log('fail!'); 
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容