Promise學習筆記(一)

2022-06-04 23:21:20 字數 2490 閱讀 8341

前言

一開始學習前端的時候,很多技術都是學習其用法,實際上很少去了解其原理,因此在空閒時,去寫一些筆記記錄一下自己對一些常用技術的原理理解。

什麼是promise?

promise 是es6提供的乙個物件,promise物件代表了未來將要發生的事件,用來傳遞非同步操作的訊息;常用在網路請求中。

promise物件的狀態不受外界影響,它有三種狀態

·

pending   進行中

·fulfilled     已成功

·rejected   已失敗

promise的狀態只能由非同步操作的結果決定。並且,promise物件的狀態既定,便不會再發生改變,且任何時候都能夠得到其結果。promise的狀態改變通常只有 pending——fulfulled ||  pending——rejected。

promise的優缺點

promise物件可以將非同步操作以同步操作的流程表達出來,避免了層層巢狀的**函式。而且promise物件提供了統一的介面,使得控制非同步操作更加容易。

但是,promise一旦新建就會立即執行,中途是無法取消的。其次,若不設定**函式,promise內部丟擲的錯誤,是不會反應到外部(由於它內部不會受到外部的影響)。當promise物件處於pending狀態時,是無法得知目前進展到哪乙個階段。

promise基礎使用

使用乙個東西的時候,我們常常需要了解這個東西內部提供了什麼給我呼叫,所以先看一下promise。

通過列印可以看出來,promise是乙個建構函式,它本身有all、reject、resolve方法,原型上還有then、catch等方法。所以想要建立乙個promise,使用new關鍵字即可。

let pro = new promise (function

(resolve, reject) , 1000)

})

promise的建構函式接收乙個函式作為引數,函式傳入了兩個引數,分別為 resoleve 和 reject,前者代表了非同步操作成功(pending—fulfilled)的**函式,後者代表了非同步操作失敗(pending—rejected)的**函式。

上面的**,執行了乙個非同步操作,也就是定時器,在1秒後,輸出「promise執行完畢」,並且呼叫resolve方法。

實際上,當我們使用new關鍵字建立promise物件時,被當做引數的函式傳進去的時候已經執行了。所以我們使用promise的時候,一般當做變數存放在乙個函式中,在需要的時候再去執行這個函式。

function

go () , 1000)

})return

pro}

那再看回來,為什麼我們要把promise包在函式中,還有就是resolve在這裡面是什麼作用。

上面的截圖中,我們知道了promise實際上是乙個建構函式,可以呼叫then、catch方法。當我們將promise包在函式中,我們可以這樣使用

function

go () , 1000)

})return

pro}

go().then(

function

(data))

看了上面這段**,就懂了,then裡面的函式實際上差不多是我們平時使用的**函式。這個時候,可能會有個疑惑,既然這樣子的用法,跟我們平時呼叫方法再寫**函式沒什麼區別,為什麼還要大費周折地去用promise?那再往**裡去想,如果有多層**,而且**本身也是乙個非同步操作呢?如果按照傳統的寫法來處理,會進入**地獄,後期維護成本會很大,維護難度高,而promise可以在then中繼續寫promise物件並返回,然後繼續呼叫then來進行**操作,可以避免上述問題。

看到這裡,我們似乎忘記了什麼,emmmm..... 就是reject。那我們看一下下面的**,很容易就理解了,這裡使用一段ajax請求來寫。

function

ajax(url)

else

};req.onerror = function

() ;

req.send();

});}var url = "請求位址";

ajax(url).then(

function

success(data),

function

fail(reason, data)

)

請求成功時,我們會用resolve傳遞成功的返回值去進行**操作,失敗或者出現異常時,則使用reject傳遞引數。在**中,可以看到,then方法中接收了兩個函式作為引數,第乙個為resolve的**,第二個為reject的**。

上述則是個人對於promise基礎使用的一些心得。

Promise學習筆記

promise 表示乙個非同步操作的最終結果,與之進行互動的方式主要是then方法,該方法註冊了兩個 函式,用於接收 promise 的終值或本 promise 不能執行的原因。乙個 promise 的當前狀態必須為以下三種狀態中的一種 等待態 pending 執行態 fulfilled 和拒絕態 ...

ES6學習筆記(一) Promise

promise 是 es6 提供的一種非同步程式設計的解決方案 將非同步操作以同步操作的流程表達出來,避免了層層巢狀的 函式 解決非同步函式 地獄的問題 promise 物件儲存著非同步操作的結果。首先看非同步的概念,這在 ecmascript6入門 中介紹的很好 所謂 非同步 簡單說就是乙個任務不...

Promise學習筆記 二 規範

這一次我是去看了下promises a 規範 照例傳送門 圖靈社群promises a 規範 首先吧個人總結下該用的詞 解決 fulfill resolve 結婚 拒絕 reject 婉拒 終值 值 eventual value value 傳家寶 拒因 reason 好人卡等等 異常 except...