es6—Promise

關於 Promise 的 9 個提示數組

八段代碼完全掌握 Promisepromise

一 什麼是promise


promise用途:異步操做隊列化,比傳統的異步操做回調函數事件更合理更強大。(回調函數:回調函數就是一個參數,將這個函數做爲參數傳到另外一個函數裏面,當那個函數執行完以後,再執行傳進去的這個函數。這個過程就叫作回調。主函數的事先幹完,回頭再調用傳進來的那個函數 )異步


異步回調的問題:           
函數

  • 嵌套層次深,難以維護
  • 沒法正常使用return和catch throw
  • 多個回調之間難以創建聯繫,一個回調函數一旦開啓,就沒法對其操做
  • 沒法正常索引堆棧信息


二 怎麼使用Promise


1.初始化Promise實例     post

2.傳入執行器executor函數,接收兩個參數resolve,rejectcdn

3.經過判斷數據處理完成或者失敗來調用resolve()或reject(),從而改變Promise狀態對象

4.Promise狀態發生改變就會觸發.then( )裏的響應函數的後續步驟,Promise狀態已經改變,就不會再變化了blog


Promise的三個狀態:索引

pending:[待定]初始狀態隊列

fulfilled:[實現]操做成功

rejected:[被否決]操做失敗


.then( )

.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的屬性

Promise.all( )

Promise.all([p1,p2,p3,...])用於將多個promise實例,包裝成一個新的Promise實例,返回一個新的普通的Promise實例。

接受一個數組做爲參數。數組裏能夠是Promise對象,也能夠是其餘值,只有Promise會等待狀態改變。

當全部的子Promise都完成,該Promise完成,返回值是所有值的數組。

子Promise有任何一個失敗,該Promise失敗,返回值爲第一個失敗子Promise的結果。


Promise實現隊列:不但願因此事情一塊兒發生,而是按照必定的順序



Promise.resolve( )

返回一個fulfilled的Promise實例,或者原始Promise實例。

參數爲空,返回一個參數爲fulfilled的實例;

參數是一個跟Promise無關的值,同上,不過,fulfilled響應函數會獲得這個參數;

參數爲Promise實例,則返回該實例,不作任何修改;

參數若是是thenable,則當即執行它的.then()函數;

Promise.reject( )

返回一個rejected的Promise實例。

Promise.reject( )不認theable。

Promise.race( )

相似於Promise.all( ),區別是Promise.race()有任意一個完成就算完成。

經常使用用法:

1.把異步操做和定時器放在一塊兒,若是定時器先觸發,就認爲超時,告知用戶

相關文章
相關標籤/搜索