ES6之promise

一丶什麼是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方法接受一個數組做爲參數,p1p2p3都是 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方法的最大區別,它接受一個普通的回調函數做爲參數,該函數無論怎樣都必須執行。

相關文章
相關標籤/搜索