Promise 自定義封裝 then 函數
<script src="./Promise.js"></script>
<script type="text/javascript">
let p = new Promise((resolve, reject) => {
resolve('ok');
})
p.then(res => {
console.log('res', res)
}, err => {
console.log(err)
})
</script>
咱們如今發現,then方法中壓根就沒有輸出內容;
是由於咱們對then函數沒有進行封裝;
因此如今咱們須要對then函數進行一次封裝了
怎麼封裝了???????????、
31 自定義封裝 then 方法執行回調
function Promise(executor){
const self=this;
function resolve(data){
// 若是狀態發生改變就直接返回(爲了讓Promise的狀態只發生一次改變);
if( self.PromiseStatus!=='pending') return
self.PromiseStatus='resolved';
self.PromiseValue=data;
}
// 一樣聲明成爲一個函數;修改狀態
function reject(err){
// 若是狀態發生改變就直接返回(爲了讓Promise的狀態只發生一次改變);
if( self.PromiseStatus!=='pending') return
self.PromiseStatus='rejected';
self.PromiseValue=err;
}
this.PromiseStatus ='pending' ;
this.PromiseValue =null;
// 對異常進行處理;使用try catch
try{
executor(resolve,reject);
}catch(err){
reject(err);
}
}
// 自定義封裝then方法執行回調
Promise.prototype.then=function(onResolve,onReject){
//下面的this是指向實例對象p的哈;
//{PromiseStatus:"resolved"PromiseValue:"ok"}
if(this.PromiseStatus==='resolved'){
onResolve(this.PromiseValue)
}
if(this.PromiseStatus==='rejected'){
onReject(this.PromiseValue)
}
}