promise、resolve、reject、攔截響應


Promise是一個接口,它用來處理的對象具有這樣的特點:在未來某一時刻(主要是異步調用)會從服務端返回或者被填充屬性。其核心是,promise是一個帶有then()函數的對象。

使用promise機制的優點如下:

1.可以對函數進行鏈式調用,所以你不會陷入代碼縮進噩夢中;

2.在調用鏈的過程中,可以保證上一個函數調用完成之后才會調用下一個函數;

3.每一個then()調用都帶有兩個參數(兩個都是函數)。第一個是成功之后的回調,第二個是出錯之后的處理器;

4.如果調用鏈中出現了錯誤,錯誤將會被冒泡傳遞到其余的錯誤處理函數中。所以,最終來說,所有錯誤都可以在任意一個回調函數中進行處理。

        你可能會問,resolve(解決)方法和reject(拒絕)方法又是什么呢?在AngularJS中,延遲調用是實現promise的一種方式。調用resolve方法將會填充promise(也就是調用success處理函數),而調用reject方法將會調用promise的錯誤處理函數。

 

 Promise接口是AngularJS組織API的基礎,從根本上講,Promise接口從以下方面對異步請求做了規范:

        a.異步請求返回一個promise,而不是返回具體值;

        b.Promise帶有一個then函數,這個函數有兩個參數:第一個參數是處理"resolved"和"sucess"事件的函數;第二個參數是處理"rejected"和"failure"事件的函數。調用這兩個函數時將會把結果或者拒絕的原因作為參數傳遞進去;

        c.只要返回結果是合法的,接口就可以保證這兩個函數中的一個會被調用。

        大多數deferred/Q實現都會遵守以上方式,但是AngularJS的實現比較特殊,原因如下:

        a.AngularJS知道$q的存在,所以$q會被整合到作用域模型中去。這樣可以使解析時的傳遞速度更快,並且可以減少UI的閃爍和刷新;

        b.AngularJS的模板也認識$q,這樣一來,接口的內容就可以被當作最終結果值(而不是當作promise)來對待,然后等獲取結果之后再通知promise;

        c.體積更小,因為對於常用的異步任務來說,AngularJS只實現了它們所需要的最基本、最重要的功能。

 

Promise機制還可以做一些非常酷的事情:攔截響應。

        我們已經學過的內容有:向服務端發送請求、處理響應、把響應很好地包裝成抽象的東西及處理異步調用。但是在真實的應用中,對於每一次服務端調用,最終還必須做一些通用的操作,例如錯誤處理、鑒權以及其他安全方面的處理(例如剪裁數據)。

        在深入理解了$q接口之后,我們就可以使用攔截響應的方式來處理以上所有任務了。響應攔截的機制允許我們在響應到達應用之前對其進行攔截,並在上面進行一些操作,例如轉換數據形式、處理錯誤等所有你能想到的操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM