溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在AngularJS對(duì)$http.post()函數(shù)進(jìn)行封裝

發(fā)布時(shí)間:2021-02-25 17:23:04 來(lái)源:億速云 閱讀:111 作者:Leah 欄目:web開(kāi)發(fā)

今天就跟大家聊聊有關(guān)怎么在AngularJS對(duì)$http.post()函數(shù)進(jìn)行封裝,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

service('myHttpService', ['$http', function ($http) {
  var myHttpPost = function (url, data, successFn, errorFn) {
  }
  return {
    myHttp: function (url, data, successFn, errorFn) {
      return myHttpPost(url, data, successFn, errorFn);
  }
  }
}]);

如上,我會(huì)return內(nèi)部定義的方法,這個(gè)方法允許使用者定義successFn和errorFn,即相應(yīng)成功和失敗的回調(diào),如此一來(lái)使用者大可放心的預(yù)先編寫(xiě)數(shù)據(jù)的處理邏輯,而無(wú)需關(guān)心其他細(xì)節(jié)。

另外,我允許使用者拿到更加靈活的post(),那么我是這樣實(shí)現(xiàn)的:

var httpPromise = $http.post(url, data, {timeout: 30000});
if (!angular.isDefined(successFn)) {
  return httpPromise;
}

如果使用者并沒(méi)有定義成功回調(diào),好吧,這層封裝就當(dāng)是不存在,我會(huì)把post()丟出去,由調(diào)用者自行處理。而如果調(diào)用者想預(yù)先定義的話,我應(yīng)當(dāng)在封裝中處理好他們的邏輯:

return httpPromise.then(
    function (response) {
     if (response.status) {
      return successFn(response);
     } else {
      /*其他處理*/
     }
    },
    function (error) {
     if (!angular.isDefined(errorFn)) {
      /*其他處理*/
     } else {
      return errorFn(error);
     }
    },
   function () {
    /*無(wú)論何總情況下都應(yīng)該被執(zhí)行的邏輯*/
   }
)

如此對(duì)于http.post()的封裝基本上就算是完成了。其中有一個(gè)地方需要注意,如果我在處理successFn的時(shí)候,用了angular.isDefined()判斷調(diào)用者是否定義了回調(diào),如果沒(méi)有,我將把處理權(quán)利交給調(diào)用者,如果已定義我將代為處理。其中then()方法比較有趣,因?yàn)閔ttp方法返回的是一個(gè)promise對(duì)象,在響應(yīng)返回的時(shí)候可以通過(guò)then()來(lái)處理響應(yīng),其實(shí)完全可以通過(guò)promise.success()和promise.error()來(lái)處理不同響應(yīng)狀態(tài)的回調(diào),但是用then()更好一些,因?yàn)樗邮盏降氖峭暾捻憫?yīng)對(duì)象,而success()和error()會(huì)對(duì)響應(yīng)對(duì)象進(jìn)行解析,具體的差別讀者可以通過(guò)console輸出來(lái)看看。

看完上述內(nèi)容,你們對(duì)怎么在AngularJS對(duì)$http.post()函數(shù)進(jìn)行封裝有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI