Promise是異步編程的一種解決方案,在ES6中Promise被列為了正式規范,統一了用法,原生提供了Promise對象
then()
then 方法就是把原來的回調寫法分離出來,在異步操作執行完后,用鏈式調用的方式執行回調函數。
而 Promise 的優勢就在於這個鏈式調用。我們可以在 then 方法中繼續寫 Promise 對象並返回,然后繼續調用 then 來進行回調操作。
可有兩個參數,第一個是成功 resolve 調用的方法,第二個是失敗 reject 調用的方法
catch()方法:
1. 它可以和 then 的第二個參數一樣,用來指定 reject 的回調
2. 它的另一個作用是,當執行 resolve 的回調(也就是上面 then 中的第一個參數)時,如果拋出異常了(代碼出錯了),那么也不會報錯卡死 js,而是會進到這個 catch 方法中。
all()方法:
Promise 的 all 方法提供了並行執行異步操作的能力,並且在所有異步操作執行完后才執行回調。
比如下面代碼,兩個個異步操作是並行執行的,等到它們都執行完后才會進到 then 里面。同時 all 會把所有異步操作的結果放進一個數組中傳給 then。
race()方法:
race 按字面解釋,就是賽跑的意思。race 的用法與 all 一樣,只不過 all 是等所有異步操作都執行完畢后才執行 then 回調。而 race 的話只要有一個異步操作執行完畢,就立刻執行 then 回調。
注意:其它沒有執行完畢的異步操作仍然會繼續執行,而不是停止。
race 使用場景很多。比如我們可以用 race 給某個異步請求設置超時時間,並且在超時后執行相應的操作。
屬性
Promise.length
length屬性,其值總是為 1 (構造器參數的數目).
Promise.prototype
表示 Promise 構造器的原型.
方法
Promise.all(iterable)
這個方法返回一個新的promise對象,該promise對象在iterable參數對象里所有的promise對象都成功的時候才會觸發成功,一旦有任何一個iterable里面的promise對象失敗則立即觸發該promise對象的失敗。這個新的promise對象在觸發成功狀態以后,會把一個包含iterable里所有promise返回值的數組作為成功回調的返回值,順序跟iterable的順序保持一致;如果這個新的promise對象觸發了失敗狀態,它會把iterable里第一個觸發失敗的promise對象的錯誤信息作為它的失敗錯誤信息。Promise.all方法常被用於處理多個promise對象的狀態集合。(可以參考jQuery.when方法---譯者注)
Promise.allSettled(iterable)
等到所有promises都完成(每個promise返回成功或失敗)。
返回一個promise,該promise在所有promise完成后完成。並帶有一個對象數組,每個對象對應每個promise的結果。
Promise.any(iterable)
接收一個Promise對象的集合,當其中的一個promise 成功,就返回那個成功的promise的值。
Promise.race(iterable)
當iterable參數里的任意一個子promise被成功或失敗后,父promise馬上也會用子promise的成功返回值或失敗詳情作為參數調用父promise綁定的相應句柄,並返回該promise對象。
Promise.reject(reason)
返回一個狀態為失敗的Promise對象,並將給定的失敗信息傳遞給對應的處理方法
Promise.resolve(value)
返回一個狀態由給定value決定的Promise對象。如果該值是thenable(即,帶有then方法的對象),返回的Promise對象的最終狀態由then方法執行決定;否則的話(該value為空,基本類型或者不帶then方法的對象),返回的Promise對象狀態為fulfilled,並且將該value傳遞給對應的then方法。通常而言,如果你不知道一個值是否是Promise對象,使用Promise.resolve(value)
來返回一個Promise對象,這樣就能將該value以Promise對象形式使用。
Promise 原型
屬性
Promise.prototype.constructor
返回被創建的實例函數. 默認為 Promise 函數.
方法
Promise.prototype.catch(onRejected)
添加一個拒絕(rejection) 回調到當前 promise, 返回一個新的promise。當這個回調函數被調用,新 promise 將以它的返回值來resolve,否則如果當前promise
進入fulfilled狀態,則以當前promise的完成結果作為新promise的完成結果.
Promise.prototype.then(onFulfilled, onRejected)
添加解決(fulfillment)和拒絕(rejection)回調到當前 promise, 返回一個新的 promise, 將以回調的返回值來resolve.
Promise.prototype.finally(onFinally)
添加一個事件處理回調於當前promise對象,並且在原promise對象解析完畢后,返回一個新的promise對象。回調會在當前promise運行完畢后被調用,無論當前promise的狀態是完成(fulfilled)還是失敗(rejected)
new Promise()
