在我的 Controller 中,我使用工厂中的方法来更新一些数据。例如,我正在尝试获取更新的用户数组。我应该从工厂返回 promise 本身吗?或者我应该从 promise 中返回数据(不确定我的措辞是否正确)?
我问这个问题是因为我已经看到了这两种方式,有些人说 Controller 不应该处理请求是否成功或失败。在这种情况下,我专门谈论从 $http 返回的 promise 。
或者换句话说,我应该在工厂内部使用 then() 方法,还是应该在从工厂返回后在 Controller 中使用它?
我尝试从服务内处理成功和错误回调(使用 this() 方法),但是当我将数据返回到 Controller 时,用户数组未正确更新。我假设这是因为请求是异步的。所以在 Controller 中,它看起来像这样:
vm.users = userFactory.getUsers();
如果我从 Controller 中处理 promise ,并在 then() 方法中设置用户数组,它就可以正常工作。但这又回到了我应该使用 then() 的地方:
userFactory.getUsers().then(
function(data){
vm.users = data;
}, ...
希望有人能够阐明这一点或提供一些意见。谢谢!
最佳答案
如果不使用回调
方法(不鼓励),则无法从工厂返回数据(因为它是异步调用):
userFactory.prototype.getUsers = function(callback){
$http.get('users').then(function (response) {
callback(response.data);
});
};
或者 promise 方法。
如果您担心处理 Controller 上的错误,那么不用担心!您可以处理服务上的错误:
userFactory.prototype.getUsers = function(){
return $http.get('users').then(function(response) {
return response.data;
}, function(error) {
// Handle your error here
return [];
});
};
您可以返回
then
的结果,它将被链接起来。因此,service
中的内容将执行,然后然后
,稍后, Controller 的内容。
关于javascript - AngularJS - 您是否从服务/工厂返回 promise 或数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32218206/