ES6中的Promise物件

2021-08-18 05:53:58 字數 3211 閱讀 7096

列印出promise,我們能看出promise是乙個建構函式

那什麼是promise?

promise是非同步程式設計的一種解決方案,它有三種狀態,

promise執行完成後,只會有成功和失敗的狀態,並且不可被更改

pending 就緒狀態 => resolved 成功狀態

pending 就緒狀態 => rejected 失敗狀態

讓我們來看一段**

var p = new promise(function(resolved,rejected)else

})

狀態為

resolved時

狀態為 rejected時

當我們定義好p後,p有狀態時,還記得列印出promise的原型上有乙個then方法吧

裡面回傳兩個函式,是幹什麼的呢?  別急,還記得我們剛才說的兩個狀態 resolved 和 rejected 嗎?

因為通過 new promise 會產生乙個物件,並且是有狀態的,且只留下 resolved 和 rejected 乙個。.then後面的函式,就是接收當它是resolved時候做什麼,當它是rejected時候做什麼。

當它是resolved

當它是rejected

這裡也可以用箭頭函式寫

p.then(data => data,err => err)
接下來,我繼續.then

p.then(data => data,err => err).then(data => console.log(data + 'sec'),err => console.log(err + 'err'))
結果

第乙個結果末尾是sec沒有錯,但為什麼第二個結果也是sec而不是err呢?

記得開篇說的  只有成功和失敗狀態,並且不可被更改嗎?

第一次then時,無論結果是 resolved 還是 rejected,他倆始終是常量,是常量的話,就會預設狀態為 resolved。

仔細想想是不是這樣?

讓我們繼續

.then()會返回乙個promise物件,一旦是promise物件,就一定會有狀態。接下來,我們再返回乙個promise物件

p.then(data => new promise((resolved,rejected) => resolved(123)),err => err)
.then(data => console.log(data + 'sec'),err => console.log(err + 'err'))
data返回了乙個 promise的物件,讓它 resolved 並返回123

如果將 resolved 改為 rejected

p.then(data => new promise((resolved,rejected) => rejected(123)),err => err)
.then(data => console.log(data + 'sec'),err => console.log(err + 'err'))
輸出結果

promise的all方法

var p1 = new promise((resolved,rejected) =>)

var p2 = new promise((resolved,rejected) =>)

var p3 = new promise((resolved,rejected) =>)

promise.all([p1,p2,p3]).then(data => console.log(data),err => console.log(err + 'aaa'))

列印結果為
只有在promise的物件都是resolved的時候,它才可以返回。如下

var p1 = new promise((resolved,rejected) =>)

var p2 = new promise((resolved,rejected) =>)

var p3 = new promise((resolved,rejected) =>)

promise.all([p1,p2,p3]).then(data => console.log(data),err => console.log(err + 'aaa'))
列印結果為
可以看到全被返回並輸出

promise的race方法

promise的all()方法是全部,而promise的race是指有乙個就可以了,並且誰先到,我用誰。

var p1 = new promise((resolved,rejected) =>,math.random() * 500)

}) var p2 = new promise((resolved,rejected) =>,math.random() * 500)

}) var p3 = new promise((resolved,rejected) =>,math.random() * 500)

})promise.race([p1,p2,p3]).then(data => console.log(data),err => console.log(err + 'aaa'))

輸出結果

關於promise就先到這裡,如果有欠缺的,歡迎各位指出,我會加緊改正。

ES6 學習 Promise物件

1.promise含義 可以將promise物件看成是乙個容器,它儲存著未來才會結束的某個事件 一般是非同步操作事件 的結果,各 種非同步操作都可以用promise物件來處理 promise的特點 1 promise物件有三個狀態 pending 進行中 fulfilled 已成功 和rejecte...

談談 ES6 的 Promise 物件

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

ES6學習之Promise物件

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