$ http.get在服务中调用...我应该在哪里处理承诺?

时间:2015-02-18 23:37:53

标签: angularjs angular-services

如果我在服务中处理它(我将数据分配给属性),控制器在数据最终到来时不会获得该值。如果我回应承诺本身没关系,我可以从控制器获取数据。但是,如果有更多的控制器依赖于同一个服务并且我希望所有控制器都能获得最新的数据,会发生什么呢?

是否有通知机制从服务到控制器进行通信?

1 个答案:

答案 0 :(得分:1)

我认为这确实是一种偏好,因为你可以做到。我更愿意返回承诺并在控制器中处理它,原因如下:

  1. 如果您的呼叫失败,请进行适当的错误处理。您可以通过不同的方式处理失败的呼叫,具体取决于您所在的控制器。
  2. 一致性。您知道,每次使用该服务,您都会收到回复。这也可以扩展到整个项目。
  3. 为了解决你的第二个问题,我认为你有几个选择。首先,您可以管理范围层次结构并使用broadcastingemitting告知其他子控制器您的数据。您可以在控制器中执行以下操作:

    myService.getData().success(function (data) {
      // do something with results
      $scope.$broadcast('GOT_DATA', data);
    });
    

    然后在子/父控制器中:

    $scope.$on('GOT_DATA', function(event, data) {
      // use data in another controller
    });
    

    您还可以考虑caching服务中的结果,同时还要回复您的承诺。然后,每当另一个控制器调用该函数时,它们就会获得与前一个调用相同的数据。这意味着您可以将服务注入到您想要的任何控制器中,然后每个控制器可以在不同的时间获取数据,但它将与原始请求相同。