一丶什麼是promisejavascript
1.Promise是異步編程的一種解決方案,它有三種狀態,分別是pending-進行中、resolved-已完成、rejected-已失敗java
2.ES6以前的promise須要引入第三方庫編程
二丶promise的優缺點json
優勢:主要解決回調地獄問題,使得代碼更清晰,減小嵌套數;數組
缺點:一旦建立,沒法取消,好比點贊操做,快速點兩次按鈕,promise
特色:(1)對象的狀態不受外界影響異步
(2)一旦建立,沒法取消異步編程
三丶.then函數
1. .then有兩個參數,第一個參數是Resolved
狀態異步成功後的回調函數,第二個參數是失敗後Rejected狀態的回調函數;post
2. .then
方法返回的是一個新的Promise
實例,能夠按照次序依次調用回調函數
3. 注意:promise的拋出錯誤具備冒泡性質,.catch裏面能夠統一捕獲,因此建議把錯誤統一寫在catch裏
四丶.catch
1.用於指定發生錯誤時的回調函數
五丶.all
1.Promise.all
方法接受一個數組做爲參數,p1
、p2
、p3
都是 Promise 實例,當p一、p二、p3的狀態都變成resolved時,promise纔會變成resolved,並調用then()的已完成回調,但只要有一個變成rejected狀態,promise就會馬上變成rejected狀態
var p = Promise.all([p1, p2, p3]);
var promises = [2, 3, 5, 7, 11, 13].map(function (id) { return getJSON('/post/' + id + ".json"); }); Promise.all(promises).then(function (posts) { // ... }).catch(function(reason){ // ... });
六丶.race
1.「競速」方法,參數與Promise.all()相同,不一樣的是,參數中的p一、p二、p3只要有一個改變狀態,promise就會馬上變成相同的狀態並執行對於的回調
七丶resolve
有時須要將現有對象轉爲Promise對象,Promise.resolve
方法就起到這個做用
八丶reject
Promise.reject(reason)
方法也會返回一個新的 Promise 實例,該實例的狀態爲rejected
。
九丶done
Promise對象的回調鏈,無論以then
方法或catch
方法結尾,要是最後一個方法拋出錯誤,都有可能沒法捕捉到(由於Promise內部的錯誤不會冒泡到全局)。所以,咱們能夠提供一個done
方法,老是處於回調鏈的尾端,保證拋出任何可能出現的錯誤。
十丶finally
finally
方法用於指定無論Promise對象最後狀態如何,都會執行的操做。它與done
方法的最大區別,它接受一個普通的回調函數做爲參數,該函數無論怎樣都必須執行。