在服务中调用了$http.get..我应该在哪里履行承诺



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

是否有从服务到控制器的通知机制?

我想这确实是一个偏好,因为你可以做任何一种。我更喜欢返回承诺并在控制器中处理它,原因如下:

  1. 如果您的呼叫失败,请进行正确的错误处理。根据您所在的控制器,您可以用不同的方式处理失败的呼叫
  2. 一致性。你知道,每次你使用这项服务,你都会得到回报。这也可以扩展到您的整个项目

为了解决你的第二个问题,我认为你有几个选择。首先,您可以管理您的作用域层次结构,并使用广播或发射来告知其他子控制器有关您的数据。你可以在你的控制器中做这样的事情:

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
});

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

最新更新