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...