天天看點

Angularjs的$http方法的success和then的差別

要将差別先弄清$http服務,它是對原生XMLHttpRequest對象的簡單封裝,是隻能接受一個參數的方法,這個方法會傳回一個promise對象,具有sccess和error兩個方法。當然,我們也可以在響應傳回時用then方法來處理,會得到一個特殊的參數,代表了對象的成功或失敗資訊,或者可以使用success和error回調代替。

這樣就很明晰了,then方法和success方法的主要差別就是,then方法會接受到完整的響應對象,而success則會對響應對象進行析構。

then是源于Promise對象的文法.是異步程式設計的一種解決方案,比傳統的回調函數更合理和更強大切更利于閱讀.。

success就是典型的回調嵌套。你現在可以能的一兩層回調沒什麼,想象一下如果嵌套5個以上回調是什麼樣子,性能方面暫且不說,就連看都看得迷迷糊糊。then就清晰很多 且性能較好

解析then:

then()方法是異步執行

當.then()前的方法執行完後再執行then()内部的程式, 這樣就避免了,資料沒擷取到等的問題

then 方法(承諾)

允許你指定實作承諾時要完成的工作。

文法

參數

promise          必需   Promise 對象

onCompleted  必需   承諾成功完成時要運作的履行處理程式函數。

onRejected     可選   承諾被拒絕時要運作的錯誤處理程式函數。

備注

承諾必須完成(傳回一個值)或者必須被拒絕(傳回一個原因)。承諾完成或被拒絕時(無論哪一個先發生),Promise 對象的 then 方法都會運作。

如果承諾成功完成,則将運作 then 方法的履行處理程式函數。如果承諾被拒絕,則将運作 then 方法(或 catch 方法)的錯誤處理程式函數。

錯誤處理

由于promises知道處理是否完成,它可以傳遞錯誤,不執行任何回調直到遇到錯誤。

通常,開發者認為一個異步的promise失敗等同于抛出一個異常。事實上,如果一個回調抛出一個錯誤,promise将傳回失敗資訊。把錯誤傳遞到下一個可用的錯誤處理器等同于抛出一次異常直到捕獲處理。

參考:

https://segmentfault.com/q/1010000010375405/a-1020000010375670

https://www.jianshu.com/p/523a7330f2f2