八段代碼完全掌握 Promisepromise
promise用途:異步操做隊列化,比傳統的異步操做回調函數和事件更合理更強大。(回調函數:回調函數就是一個參數,將這個函數做爲參數傳到另外一個函數裏面,當那個函數執行完以後,再執行傳進去的這個函數。這個過程就叫作回調。主函數的事先幹完,回頭再調用傳進來的那個函數 )異步
異步回調的問題:
函數
1.初始化Promise實例 post
2.傳入執行器executor函數,接收兩個參數resolve,rejectcdn
3.經過判斷數據處理完成或者失敗來調用resolve()或reject(),從而改變Promise狀態對象
4.Promise狀態發生改變就會觸發.then( )裏的響應函數的後續步驟,Promise狀態已經改變,就不會再變化了blog
Promise的三個狀態:索引
pending:[待定]初始狀態隊列
fulfilled:[實現]操做成功
rejected:[被否決]操做失敗
.then( ) 接受兩個函數做爲參數,分別表明fulfilled,rejected。
.then()返回一個新的Promise實例,因此能夠鏈式調用。
狀態響應函數能夠返回新的Promise,或者其餘值,也能夠不返回(undefined)。
.then()返回新的Promise,下一級.then()會在新的Promise狀態改變後根據其最終狀態,選擇特定的狀態響應函數執行執行。.then()裏不返回Promise實例或者其餘值,則馬上執行下一級.then()。
Promise會自動捕獲內部異常,並提交給rejected響應函數處理
Promise做爲隊列最重要的特性,在任何地方生成一個Promise對象,能夠將Promise對象作爲變量傳遞到其餘地方
then的嵌套 .then( )裏有.then( )的狀況
要等裏面的.then()執行完,再執行外面的,能夠把裏面的.then()展開
Promise.all([p1,p2,p3,...])用於將多個promise實例,包裝成一個新的Promise實例,返回一個新的普通的Promise實例。
接受一個數組做爲參數。數組裏能夠是Promise對象,也能夠是其餘值,只有Promise會等待狀態改變。
當全部的子Promise都完成,該Promise完成,返回值是所有值的數組。
子Promise有任何一個失敗,該Promise失敗,返回值爲第一個失敗子Promise的結果。
Promise實現隊列:不但願因此事情一塊兒發生,而是按照必定的順序
返回一個fulfilled的Promise實例,或者原始Promise實例。
參數爲空,返回一個參數爲fulfilled的實例;
參數是一個跟Promise無關的值,同上,不過,fulfilled響應函數會獲得這個參數;
參數爲Promise實例,則返回該實例,不作任何修改;
參數若是是thenable,則當即執行它的.then()函數;
返回一個rejected的Promise實例。
Promise.reject( )不認theable。
相似於Promise.all( ),區別是Promise.race()有任意一個完成就算完成。
經常使用用法:
1.把異步操做和定時器放在一塊兒,若是定時器先觸發,就認爲超時,告知用戶