Promise對象的簡單用法

要了解一個東西,首先要從,它是什麼、用來作什麼以及怎麼取用它這三個方面來了解。javascript

  1. 首先,promise是什麼?

咱們來參考一下MDN對它的定義:java

Promise 對象用於一個異步操做的最終完成(或失敗)及其結果值的表示。(簡單點說就是處理異步請求。咱們常常會作些承諾,若是我贏了你就嫁給我,若是輸了我就嫁給你之類的諾言。這就是promise的中文含義:諾言,一個成功,一個失敗。)api

能夠看到,promise是一個對象,用來處理異步操做,那麼咱們又要了解一下什麼是同步異步,如下是我對同步異步的理解:數組

異步:被請求人的消息通知機制,即當被請求者在接收到請求以後,處理請求,處理完成後是否通知請求者的消息通知機制。promise

同步:請求者的事務處理機制,即當請求者發出請求後,是否等待請求結果,繼續處理接下來的事務。異步

總結promise是什麼:函數

promise是一個構造函數,用來處理javascript中的異步操做。prototype

  1. promise用來作什麼?
    在MDN的定義中已經給出答案,它用來處理異步操做,即維護事件處理的狀態,方便咱們對異步操做獲取更直觀的感覺,就是在一個事件處理的過程當中,監聽事件處理的狀態成功與否,而後由這些狀態決定下一步操做。

MDN中對promise有這樣的描述:代理

Promise 對象是一個代理對象(代理一個值),被代理的值在Promise對象建立時多是未知的。它容許你爲異步操做的成功和失敗分別綁定相應的處理方法(handlers)。 這讓異步方法能夠像同步方法那樣返回值,但並非當即返回最終執行結果,而是一個能表明將來出現的結果的promise對象code

引用阮一峯ES6中的一句話介紹promise能爲咱們作什麼,以及有什麼缺點:

有了Promise對象,就能夠將異步操做以同步操做的流程表達出來,避免了層層嵌套的回調函數。此外,Promise對象提供統一的接口,使得控制異步操做更加容易。

首先,沒法取消Promise,一旦新建它就會當即執行,沒法中途取消。其次,若是不設置回調函數,Promise內部拋出的錯誤,不會反應到外部。第三,當處於pending狀態時,沒法得知目前進展到哪個階段(剛剛開始仍是即將完成)。

  1. 基本用法

Promise是一個構造函數,用來生成Promise實例:

var promise= new Promise(function(resolve,reject){
        //執行一些代碼
        if(若是異步操做成功){
            resolve(value)
        }else{
            //異步操做失敗
            reject(error)
        }
    })

Promise對象經過維護三種狀態來實現異步操做,這三種狀態分別是:

  • pending:初始值,不是成功或失敗狀態
  • fulfilled :成功狀態
  • rejected :操做失敗狀態

在以上實例構建過程當中:Promise在構建實例的過程總接受一個函數做爲參數,這個函數又擁有兩個函數做爲參數(resolve,reject),分別表明着:

  • resolve函數的做用是將Promise對象的狀態從「未完成」變爲「成功」狀態,在異步操做成功時調用,器參數爲異步操做返回出的結果。
  • reject函數的做用則恰好相反,是將Promise對象的狀態從「未完成」狀態改變爲「失敗」狀態,在異步操做失敗時調用,其參數爲異步操做失敗返回的錯誤信息。

Promise中的經常使用API

  • then
    做用:Promise對象根據異步操做結果,執行相應的回調函數,接受兩個回調函數做爲參數,第一個爲Promise對象狀態改變爲resolved時調用,第二個回調函數爲Promise對象狀態改變爲reject時調用,第二個參數是可選的,不是必須的,這兩個函數都接受Promise傳出的值做爲參數。
  • catch
    做用:該方法是Promise.prototype.catch方法是.then(null, rejection)的別名,用於指定發生錯誤時的回調函數。
  • all
    做用:該方法用於將多個Promise實例包裝成一個新的實例
var  promise=Promise.all([p1,p2,p3])
    //該方法接受一個數組做爲參數,數組中p1,p2,p3均爲promise實例,只有當數組中的promise對象的狀態所有爲"成功"狀態時,promise的狀態纔會變爲成功狀態,並將三個數組中的promise對象返回的結果,按照參數的順序傳遞給promise的回調函數。
相關文章
相關標籤/搜索