$http.get 在服务中调用...我应该在哪里处理承诺?
$http.get called in a service... where I should handle the promise?
如果我在服务中处理它(我将数据分配给一个属性),当数据最终到来时,控制器并没有得到值。如果我用 promise 本身来回应,没关系,我可以从控制器获取数据。但是,如果有更多控制器依赖于同一个服务,并且我希望它们都获得最新数据,会发生什么情况?
是否有从服务到控制器的通知机制?
我想这真的是一个偏好的事情,因为你可以做任何一个。我更喜欢 return promise 并在控制器中处理它,原因如下:
- 调用失败时的正确错误处理。您可以用不同的方式处理失败的调用,具体取决于您所在的控制器。
- 一致性。您知道,每次使用该服务时,您都会得到一个承诺。这也可以扩展到您的整个项目。
要解决你的第二个问题,我想你有几个选择。首先,您可以管理您的范围层次结构并使用 broadcasting or emitting 将您的数据告知其他子控制器。你可以在你的控制器中做这样的事情:
myService.getData().success(function (data) {
// do something with results
$scope.$broadcast('GOT_DATA', data);
});
然后在 child/parent 控制器中:
$scope.$on('GOT_DATA', function(event, data) {
// use data in another controller
});
您还可以考虑 caching 您的服务结果,同时 return 兑现您的承诺。然后,每当另一个控制器调用该函数时,它们都会获得与上一次调用相同的数据。这意味着你可以将你的服务注入到任何你想要的控制器中,然后每个控制器都可以在不同的时间获取数据,但它会与原始请求相同。
如果我在服务中处理它(我将数据分配给一个属性),当数据最终到来时,控制器并没有得到值。如果我用 promise 本身来回应,没关系,我可以从控制器获取数据。但是,如果有更多控制器依赖于同一个服务,并且我希望它们都获得最新数据,会发生什么情况?
是否有从服务到控制器的通知机制?
我想这真的是一个偏好的事情,因为你可以做任何一个。我更喜欢 return promise 并在控制器中处理它,原因如下:
- 调用失败时的正确错误处理。您可以用不同的方式处理失败的调用,具体取决于您所在的控制器。
- 一致性。您知道,每次使用该服务时,您都会得到一个承诺。这也可以扩展到您的整个项目。
要解决你的第二个问题,我想你有几个选择。首先,您可以管理您的范围层次结构并使用 broadcasting or emitting 将您的数据告知其他子控制器。你可以在你的控制器中做这样的事情:
myService.getData().success(function (data) {
// do something with results
$scope.$broadcast('GOT_DATA', data);
});
然后在 child/parent 控制器中:
$scope.$on('GOT_DATA', function(event, data) {
// use data in another controller
});
您还可以考虑 caching 您的服务结果,同时 return 兑现您的承诺。然后,每当另一个控制器调用该函数时,它们都会获得与上一次调用相同的数据。这意味着你可以将你的服务注入到任何你想要的控制器中,然后每个控制器都可以在不同的时间获取数据,但它会与原始请求相同。