$q服務的API詳解

標籤:

下面我們通過講解$q的API讓你更多的瞭解promise異步編程模式。$q是做爲angularjs的一個服務而存在的,只是對promise異步編程模式的一個簡化實現版,源碼中剔除註釋實現代碼也就二百多行,下面開始介紹$q的API。

     defer對象(延遲對象)可以通$q.defer()獲取,下面是defer對象的api:

     方法:

     resolve(value):向promise對象異步執行體發送消息告訴他我已經成功完成任務,value即爲發送的消息。

     reject(value): 向promise對象異步執行體發送消息告訴他我已經不可能完成這個任務了,value即爲發送的消息。

     notify(value): 向promise對象異步執行體發送消息告訴他我現在任務完成的情況,value即爲發送的消息。

  這些消息發送完promise會調用現有的回調函數。

     屬性:

     promise即與這個defer對象的承諾對象。

  從上可以看出defer主要是用來發送消息的。

  promise對象可以通過defer.promise獲取,下面是promise對象的api:

方法:

  then(successCallback,errorCallback,notifyCallback):參數爲不同消息下的不同回調函數,defer發送不同的消息執行不同的回調函數,消息作爲這些回調函數的參數傳遞。返回值爲回一個promise對象爲支持鏈式調用而存在。當第一個defer對象發送消息後,後面的promise對應的defer對象也會發送消息,但是發送的消息不一樣,不管第一個defer對象發送的是reject還是resolve,第二個及其以後的都是發送的resolve,消息是可傳遞的。

  catch(errorCallback):then(null,errorCallback)的縮寫。

  finally(callback):相當於then(callback,callback)的縮寫,這個finally中的方法不接受參數,卻可以將defer發送的消息和消息類型成功傳遞到下一個then中。

方法:

  defer():用來生成一個延遲對象 var defer =$q.defer();

  reject():參數接收錯誤消息,相當於在回調函數中拋出一個異常,然後在下一個then中調用錯誤的回調函數。

 all():參數接收爲一個promise數組,返回一個新的單一promise對象,當這些promise對象對應defer對象全部解決這個單一promise對象纔會解決,當這些promise對象中有一個被reject了,這個單一promise同樣的被reject了。

 when():接收第一個參數爲一個任意值或者是一個promise對象,其他3個同promise的then方法,返回值爲一個promise對象。第一個參數若不是promise對象則直接運行success回調且消息爲這個對象,若爲promise那麼返回的promise其實就是對這個promise類型的參數的一個包裝而已,被傳入的這個promise對應的defer發送的消息,會被我們when函數返回的promise對象所接收到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章