Promise對象是什么?


Promise對象是ES6( ECMAScript 2015 )對於異步編程提供的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。

詳細解答:

傳統回調:

// 當參數a大於10且參數func2是一個方法時 執行func2 function func1(a, func2) { if (a > 10 && typeof func2 == 'function') { func2() } } func1(11, function() { console.log('this is a callback') }) 

Promise對象改寫:

function func1(a){ return new Promise((resolve,reject) => { if(a > 10){ resolve(a) }else{ reject(b) } }) }; func1('11').then(res => { console.log('success'); }).catch(err => { console.log('error'); }) 

Promise對象的兩個特點:

1、對象的狀態不受外界影響。

Promise對象有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。

只有異步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。

這也是Promise這個名字的由來,它的英語意思就是“承諾”,表示其他手段無法改變。

2、一旦狀態改變,就不會再變,任何時候都可以得到這個結果。

Promise對象的狀態改變,只有兩種可能:

從pending變為fulfilled和從pending變為rejected。

只要這兩種情況發生,狀態就凝固了,不會再變了,會一直保持這個結果,這時就稱為 resolved(已定型)。

如果改變已經發生了,你再對Promise對象添加回調函數,也會立即得到這個結果。這與事件(Event)完全不同,事件的特點是,如果你錯過了它,再去監聽,是得不到結果的。

Promise對象實例的兩個參數,resolve 和 reject:

Promise構造函數接受一個函數作為參數,該函數的兩個參數分別resolve 和 reject。它們是兩個函數,由 JavaScript 引擎提供,不用自己部署。

resolve函數的作用是: 將Promise對象的狀態從“未完成”變為“成功”(即從 pending 變為 fulfilled),在異步操作成功時調用,並將異步操作的結果,作為參數傳遞出去;

reject函數的作用是: 將Promise對象的狀態從“未完成”變為“失敗”(即從 pending 變為 rejected),在異步操作失敗時調用,並將異步操作報出的錯誤,作為參數傳遞出去。

Promise對象實例的方法,then 和 catch:

.then方法: 用於指定調用成功時的回調函數。

then方法返回的是一個新的Promise實例(注意,不是原來那個Promise實例),因此可以采用鏈式寫法,即then方法后面再調用另一個then方法。

.catch方法: 用於指定發生錯誤時的回調函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM