ES6 學習 Promise物件

2022-04-30 21:06:16 字數 1550 閱讀 3484

1.promise含義:可以將promise物件看成是乙個容器,它儲存著未來才會結束的某個事件(一般是非同步操作事件)的結果,各

種非同步操作都可以用promise物件來處理

promise的特點:

(1)promise物件有三個狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗),只有非同步操作的結果,可

以決定當前是哪一種狀態,其他操作無法改變當前狀態

(2)一旦狀態值改變,就不會再變了,任何時候都可以得到這個結果。promise物件的狀態改變,只有從pending變為

fulfilled和從pending變為rejected兩種,狀態發生改變之後,就不會再變動

2.promise物件的優缺點:

優點--- 有了promise物件,就可以將非同步操作以同步操作的流程表達出來,避免了多層巢狀的**函式,另外promise物件提

供統一的介面,使得控制非同步操作更加容易

缺點:無法取消promise,一旦新建就立即執行,無法取消;如果不設定**函式,promise內部報錯不會反應到外部;當處於

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

***解決promise建立自動執行的辦法:將promise物件在乙個函式中定義,當我們呼叫函式時,才去執行promise物件

3.promise物件例項用法

function getdata() else

})return p;

};// 通過promise建構函式建立例項,該建構函式接收乙個匿名函式作為引數,匿名函式的兩個引數resolve和reject都 

是兩個函式。resolve函式的作用是,將promise物件的狀態從「未完成」變成「成功」,在非同步操作成功時呼叫,並作為引數 

傳遞出去;reject函式的作用是,將promise物件的狀態從「未完成」變為「失敗」,在非同步操作失敗時呼叫,並將非同步操作報 

的錯作為引數傳遞出去

getdata().

then(function(result) )

.catch(function(error) )

promise.prototype.finally() // 不管promise物件最後狀態如何,該方法都會執行

如下:promise

.then( result => ) // 狀態值為resolved時執行

.catch( error => ) // 狀態值為rejected時執行

.finally( ()=> ); // 不管如何都會執行

promise.all() // 將多個promise例項,包裝成乙個新的promise例項,如下:

const p = promise.all([p1, p2, p3]);

(1)只有p1、p2、p3的狀態都變成fulfilled時,p的狀態才變成fulfilled,此時p1、p2、p3的返回值組成乙個陣列,傳遞給p的

**函式

(2)只要p1、p2、p3中的乙個狀態為rejected,那麼p的狀態就變成rejected,此時第乙個狀態為rejected的例項的返回值,會

傳遞給p的**函式

ES6學習之Promise物件

promise 是非同步程式設計的一種解決方案,比傳統的解決方案 函式和事件 更合理和更強大。原生提供了promise 物件。promise 簡單說就是乙個容器,裡面儲存著之後才執行的事件。從語法層面來說,promise 是乙個物件,從它可以獲取非同步操作的訊息。promise 提供統一的 api,...

談談 ES6 的 Promise 物件

ajax 如果幾個非同步操作之間並沒有前後順序之分 例如不需要前乙個請求的結果作為後乙個請求的引數 時,同樣需要等待上乙個操作完成再實行下乙個操作。function helloworld ready else helloworld true then function message functio...

ES6中的Promise物件

列印出promise,我們能看出promise是乙個建構函式 那什麼是promise?promise是非同步程式設計的一種解決方案,它有三種狀態,promise執行完成後,只會有成功和失敗的狀態,並且不可被更改 pending 就緒狀態 resolved 成功狀態 pending 就緒狀態 reje...