在es6中,promise用於建立promise物件並進行非同步操作,語法為「const promise = new Promise((resolve,reject)=>{...})」;它持有非同步操作的狀態,用來表示非同步操作的不同結果。
本教學操作環境:windows10系統、ECMAScript 6.0版、Dell G3電腦。
Promise是ES6中提供的一個非同步程式設計的解決方案,Promise本身就是一個建構子
typeof Promise // function
一般情況下我們在開發中會使用new Promise() 呼叫建構函數,建立一個新的Promise物件
#建立Promise 物件進行非同步操作
Promise 也是建構函數,需要使用new關鍵字來建立實例,建立時接受一個函數,且該函數有兩個函數類型的參數:
#resolve
reject
所以創建Promise 的操作就是:
const promise = new Promise((resolve,reject)=>{...})
resolve 和reject 兩個函數參數決定了當前Promise 的狀態改變以及非同步操作的結果如何處理,他們都可以將非同步操作的結果傳遞出去。
1、物件的狀態不受外界影響。
Promise物件是一個非同步操作,有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。
只有非同步操作的結果,可以決定Promise是哪一種狀態,任何其他操作都無法改變這個狀態
2、一旦Promise狀態改變,就不會再有變化,任何時候都可以得到這個結果。
Promise物件的狀態改變,只有兩種可能:從pending變成fulfilled 或 從pending變成rejected。只要這兩種情況發生,狀態就不會再變了,會一直維持這個結果,這時就稱為 resolved(已定型)。如果改變已經發生了,你再對Promise物件加入回呼函數,也會立即得到這個結果。這與事件(Event)不同,事件的特點是,如果你錯過了它,再去監聽,是得不到結果的
使用Promise的好處,就是在處理非同步程式時,將非同步操作隊列化,依照期望的順序執行,傳回符合預期的結果,這樣即使是多重非同步操作,也可以方便的使用Promise進行鍊式呼叫
3、Promise也有一些缺點。
首先,無法取消Promise,一旦新建它就會立即執行,無法中途取消。其次,如果不設定回呼函數,Promise內部拋出的錯誤,不會反應到外部。第三,當處於pending狀態時,無法得知目前進展到哪一個階段(剛開始還是即將完成)
所謂Promise,簡單說就是一個容器,裡面保存著某個未來才會結束的事件(通常是一個非同步操作)的結果。
ES6 規定,Promise物件是一個建構函數,用來產生Promise實例。
下面程式碼創造了一個Promise實例。
const promise = new Promise(function(resolve, reject) { // ... some code if (/* 异步操作成功 */){ resolve(value); } else { reject(error); } });
Promise建構子接受一個函數作為參數,該函數的兩個參數分別是resolve和reject。它們是兩個函數,由 JavaScript 引擎提供,不用自己部署。
resolve函數的作用是,將Promise物件的狀態從「未完成」變為「成功」(即從pending 變為resolved),在非同步操作成功時調用,並將非同步操作的結果,作為參數傳遞出去;reject函數的作用是,將Promise物件的狀態從「未完成」變為「失敗」(即從pending 變為rejected),在非同步操作失敗時調用,並將非同步操作報出的錯誤,作為參數傳遞出去。
Promise實例產生以後,可以用then方法分別指定resolved狀態和rejected狀態的回呼函數。
promise.then(function(value) { // success }, function(error) { // failure });
then方法可以接受兩個回呼函數作為參數。第一個回呼函數是Promise物件的狀態變成resolved時調用,第二個回呼函數是Promise物件的狀態變成rejected時調用。其中,第二個函數是可選的,不一定要提供。這兩個函數都接受Promise物件傳出的值作為參數。
【相關推薦:javascript影片教學、web前端】
以上是es6中promise有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!