簡體   English   中英

AngularJS-您是否從服務/工廠返回承諾或數據?

[英]AngularJS - Do you return the promise or data from the service/factory?

在控制器中,我使用工廠提供的方法來更新一些數據。 例如,我正在嘗試獲取一組更新的用戶。 我應該從工廠退還諾言嗎? 還是我應該從諾言中返回數據(不確定我的措詞是否正確)?

我之所以問是因為我已經同時看到了這兩種方法,有人說控制器不需要處理請求是否成功。 我特別是在談論這種情況下從$ http返回的promise。

或者換句話說,我應該在工廠內部使用then()方法,還是應該在從工廠返回后在控制器中使用它?

我試圖從服務中處理成功和錯誤回調(使用this()方法),但是當我將數據返回給控制器時,users數組未正確更新。 我假設那是因為請求是異步的。 因此,在控制器中,它看起來像這樣:

vm.users = userFactory.getUsers();

如果我從控制器內部處理Promise,並在then()方法中設置users數組,則它可以正常工作。 但這又回到了我應該使用then()的地方:

userFactory.getUsers().then(
   function(data){
      vm.users = data;
   }, ...

希望有人能夠對此有所啟發或提供一些意見。 謝謝!

如果不使用callback方法(不建議使用),則無法從工廠返回數據(因為這是異步調用):

userFactory.prototype.getUsers = function(callback){
  $http.get('users').then(function (response) {
      callback(response.data);
  });
};

還是承諾方法。

如果您擔心處理控制器上的錯誤,那就不用擔心! 您可以處理服務上的錯誤:

userFactory.prototype.getUsers = function(){
  return $http.get('users').then(function(response) {
      return response.data;
  }, function(error) {
    // Handle your error here
    return [];
  });
};

您可以return then的結果,它將被鏈接。 因此,將執行servicethen執行控制器操作。

控制器根據響應失敗/成功決定要做什么,我沒有問題。 實際上,它可以讓您輕松處理不同的情況,並且不會給控制器增加太多開銷(控制器應該盡可能小,並專注於當前任務,但是對我而言,請求失敗是否是其任務的一部分)。

無論如何,在Angular HTTP中,請求是在內部包裝在Promise中的(我記得在以前的版本中,有一種方法可以自動解開它們),因此從服務/工廠返回總是返回一個Promise,必須對此進行解決。

我更喜歡從服務/工廠返回承諾,因為我傾向於讓其他類決定如何處理響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM