ES6語法 -- Promise初識(一)
阿新 • • 發佈:2018-11-09
概念
Promise 是一種非同步程式設計的解決方案
Promise 相關知識點
- Promise物件是一個建構函式,用來生成Promise例項。可以直接用 new 一元運算子來執行,並申明一個變數( 假如是 P )來儲存promise返回出來的物件(P 也稱之為 promise 物件)
- 建構函式接收一個回撥函式,這個回撥函式接收2個引數,一個 resolve(成功), 一個 reject(失敗) ;
- 回撥函式中,可以寫一些非同步操作,比如setTimeout 或者 ajax 請求之類的
- promise 執行之後返回的 promise 物件 P 下 有一個 .then 的方法,用來註冊我們成功狀態下要完成的函式,或者是失敗狀態下要完成的函式
- .then 接收兩個引數,都是函式;第一個函式是呼叫resolve之後會執行的函式, 第二個函式是呼叫 reject 之後會執行的函式
- resolve 中 可以接收 簡單型別的值, 也可以接收 promise 物件, 或者是 thenable 物件
- 當給 resolve 傳入一個promise 物件的時候, 只有等到 promise 物件轉成 成功 或者 失敗,resolve 才會成功當給 resolve 傳入一個promise 物件的時候, 只有等到 promise 物件轉成 成功 或者 失敗,resolve 才會成功
- .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( ){ }
}