要了解一個東西,首先要從,它是什麼、用來作什麼以及怎麼取用它這三個方面來了解。javascript
咱們來參考一下MDN對它的定義:java
Promise 對象用於一個異步操做的最終完成(或失敗)及其結果值的表示。(簡單點說就是處理異步請求。咱們常常會作些承諾,若是我贏了你就嫁給我,若是輸了我就嫁給你之類的諾言。這就是promise的中文含義:諾言,一個成功,一個失敗。)api
能夠看到,promise是一個對象,用來處理異步操做,那麼咱們又要了解一下什麼是同步異步,如下是我對同步異步的理解:數組
異步:被請求人的消息通知機制,即當被請求者在接收到請求以後,處理請求,處理完成後是否通知請求者的消息通知機制。promise
同步:請求者的事務處理機制,即當請求者發出請求後,是否等待請求結果,繼續處理接下來的事務。異步
總結promise是什麼:函數
promise是一個構造函數,用來處理javascript中的異步操做。prototype
MDN中對promise有這樣的描述:代理
Promise 對象是一個代理對象(代理一個值),被代理的值在Promise對象建立時多是未知的。它容許你爲異步操做的成功和失敗分別綁定相應的處理方法(handlers)。 這讓異步方法能夠像同步方法那樣返回值,但並非當即返回最終執行結果,而是一個能表明將來出現的結果的promise對象code
引用阮一峯ES6中的一句話介紹promise能爲咱們作什麼,以及有什麼缺點:
有了Promise對象,就能夠將異步操做以同步操做的流程表達出來,避免了層層嵌套的回調函數。此外,Promise對象提供統一的接口,使得控制異步操做更加容易。
首先,沒法取消Promise,一旦新建它就會當即執行,沒法中途取消。其次,若是不設置回調函數,Promise內部拋出的錯誤,不會反應到外部。第三,當處於pending狀態時,沒法得知目前進展到哪個階段(剛剛開始仍是即將完成)。
Promise是一個構造函數,用來生成Promise實例:
var promise= new Promise(function(resolve,reject){ //執行一些代碼 if(若是異步操做成功){ resolve(value) }else{ //異步操做失敗 reject(error) } })
Promise對象經過維護三種狀態來實現異步操做,這三種狀態分別是:
在以上實例構建過程當中:Promise在構建實例的過程總接受一個函數做爲參數,這個函數又擁有兩個函數做爲參數(resolve,reject),分別表明着:
var promise=Promise.all([p1,p2,p3]) //該方法接受一個數組做爲參數,數組中p1,p2,p3均爲promise實例,只有當數組中的promise對象的狀態所有爲"成功"狀態時,promise的狀態纔會變爲成功狀態,並將三個數組中的promise對象返回的結果,按照參數的順序傳遞給promise的回調函數。