[英]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
的结果,它将被链接。 因此,将执行service
, then
执行控制器操作。
控制器根据响应失败/成功决定要做什么,我没有问题。 实际上,它可以让您轻松处理不同的情况,并且不会给控制器增加太多开销(控制器应该尽可能小,并专注于当前任务,但是对我而言,请求失败是否是其任务的一部分)。
无论如何,在Angular HTTP中,请求是在内部包装在Promise中的(我记得在以前的版本中,有一种方法可以自动解开它们),因此从服务/工厂返回总是返回一个Promise,必须对此进行解决。
我更喜欢从服务/工厂返回承诺,因为我倾向于让其他类决定如何处理响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.