1. 程式人生 > >ES6語法 -- Promise初識(一)

ES6語法 -- Promise初識(一)

概念

Promise 是一種非同步程式設計的解決方案

Promise 相關知識點

  1. Promise物件是一個建構函式,用來生成Promise例項。可以直接用 new 一元運算子來執行,並申明一個變數( 假如是 P )來儲存promise返回出來的物件(P 也稱之為 promise 物件)
  2. 建構函式接收一個回撥函式,這個回撥函式接收2個引數,一個 resolve(成功), 一個 reject(失敗) ;
  3. 回撥函式中,可以寫一些非同步操作,比如setTimeout 或者 ajax 請求之類的
  4. promise 執行之後返回的 promise 物件 P 下 有一個 .then 的方法,用來註冊我們成功狀態下要完成的函式,或者是失敗狀態下要完成的函式
  5. .then 接收兩個引數,都是函式;第一個函式是呼叫resolve之後會執行的函式, 第二個函式是呼叫 reject 之後會執行的函式
  6. resolve 中 可以接收 簡單型別的值, 也可以接收 promise 物件, 或者是 thenable 物件
  7. 當給 resolve 傳入一個promise 物件的時候, 只有等到 promise 物件轉成 成功 或者 失敗,resolve 才會成功當給 resolve 傳入一個promise 物件的時候, 只有等到 promise 物件轉成 成功 或者 失敗,resolve 才會成功
  8. .then 中成功或者是失敗執行的函式的返回值

返回一個簡單型別的的返回值,作為then方法返回的 promise 物件的成功狀態的值
返回一個 thenable 物件的時候, 只是成功狀態才能執行下一個 .then


promise 的三種狀態

pengding : 正在進行,暫時還不知道是否會成功或者失敗
fulfilled : 已經完成,非同步操作完成之後,如果呼叫的是 resolve 則執行的是成功的事情
rejected : 已經失敗,非同步操作完成之後,如果呼叫的是reject 則執行的是失敗的事情


promise 的特點

① 物件的狀態不受外界影響: promise 有三種狀態,決定當前是哪一種狀態取決於非同步操作的結果,其他任何操作都無法改變這個狀態

② 狀態一旦改變,就不會再變: Promise物件的狀態改變,只有兩種可能:從pending變為fulfilled和從pending變為rejected,不會有其他的改變情況

③ 不可取消: promise 一旦新建它就會立即執行,無法中途取消

④ 如果不設定回撥函式,Promise內部丟擲的錯誤,不會反應到外部

⑤當處於pending狀態時,無法得知目前進展到哪一個階段(剛剛開始還是即將完成)


promise 的 鏈式操作

如果我們需要多次呼叫 .then 方法, 可以寫多次 P.then ( ); P.then ( ); P.then ( );
也可以直接用鏈式操作: P.then( ).then( ).then( );


thenthenable

概念: 在一個物件,或者函式中 有.then 函式

{
then( ){ }
}