promise方法總結

2022-03-08 10:52:28 字數 1577 閱讀 2953

優點:1、物件的狀態不受外界的影響,只有非同步操作的結果可以決定是那種狀態;2、狀態一旦改變,就不會再次改變。任何時候都可以得到這個結果。在這裡跟(event)事件不同,如果錯過了這個事件結果再去監聽,是監聽不到event事件的。

缺點:1、promise一旦執行無法取消。2、如果不設定**函式promise內部丟擲的錯誤,不會反映到外部。3、當處於pending(進行中)的狀態時,無法得知進行到那一階段(剛開始或者即將完成)。

基本用法:es6規定,promise物件是乙個建構函式,用來生成promise例項。promise建構函式接受乙個函式作為引數,該函式有兩個引數分別是resolve和reject;resolve表示成功的**,reject表示失敗的**;

then方法:then方法返回的是乙個新的promise例項。注意:如果採用鏈式的then,可以指定一組按照次序呼叫的**函式,如果前乙個**函式返回的是promise,後乙個函式會等前乙個狀態發生改變才會呼叫。

catch方法:catch方法是在promise發生錯誤時的**。注意:如果promise狀態已經變成resolved,在丟擲錯誤時無效的。promise錯誤具有『冒泡』性質,會一直往上傳遞,直到**獲。

finally方法:finally方法指定無倫最後promise最後狀態如何都會執行的函式。注意:finally不接受任何引數,這就意味著無法直到前面的promise狀態。

all方法:all方法用於將多個例項包裝成乙個新的promise例項。注意:只有當所有的例項都變成fulfilled時,包裝的例項狀態,才會變成fulfilled,此時他們的返回值會傳遞給新的**函式,只要其中有乙個被rejected,包裝的例項狀態就會變成rejected,此時第乙個被rejected的例項返回值會傳遞給新的**。

race方法:race方法同樣是將多個例項包裝成乙個新的例項。跟上面的all方法類似。

allsettled方法:allsettled方法接收一組promise例項作為引數,包裝成乙個新的例項。注意:只有等所有的例項都返回結果,才會結束。返回的結果不論成功失敗,狀態總是fulfilled,不會是失敗。

any方法:接收一組promise例項作為引數,只要有乙個變為fulfilled狀態,包裝的例項就會變成fulfilled狀態,如果所有的引數都變成rejected狀態,就會變成rejected狀態。

reject方法:reject方法會返回乙個新的例項,狀態為rejected。**函式立即執行。

try方法:在實際開發中遇到無法區分函式是同步還是非同步操作時,但是還想用promise來處理,可以使用try方法。

resolve方法:將現有物件轉為promise物件,它的引數分為四種情況:

1、引數是乙個promise例項;如果引數是promise例項,則不作修改,原樣返回。

2、引數是乙個thenable物件,是指由then方法的物件;該方法會將這個物件轉為promise物件,然後立即執行then方法。

3、如果不是具有then方法的物件或者根本不是物件;如果引數是乙個原始值,或者是乙個不具有then方法的物件,則promise。resolve方法返回乙個新的promise物件,狀態為resolved

4、不帶有任何引數;如果不帶有任何引數會直接返回乙個resolved狀態的promise物件。

promise學習總結

promise是非同步程式設計的一種解決方案,它有三種狀態,分別是pending 進行中 resolved 已完成 rejected 已失敗 當promise的狀態又pending轉變為resolved或rejected時,會執行相應的方法,並且狀態一旦改變,就無法再次改變狀態,這也是它名字prom...

Promise常用方法

doctype html en utf 8 viewport content width device width,initial scale 1.0 document title utils.js script head sendmsg 傳送請求 button 傳送三個不同的請求,根據三個返回做資...

promise執行順序總結

1 const promise new promise resolve,reject promise.then console.log 5 執行結果是 1,2,5,4 解釋 promise的建構函式是同步執行,promise.then中的函式是非同步執行。2 const promise new pr...