繁体   English   中英

AngularJS-您是否从服务/工厂返回承诺或数据?

[英]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的结果,它将被链接。 因此,将执行servicethen执行控制器操作。

控制器根据响应失败/成功决定要做什么,我没有问题。 实际上,它可以让您轻松处理不同的情况,并且不会给控制器增加太多开销(控制器应该尽可能小,并专注于当前任务,但是对我而言,请求失败是否是其任务的一部分)。

无论如何,在Angular HTTP中,请求是在内部包装在Promise中的(我记得在以前的版本中,有一种方法可以自动解开它们),因此从服务/工厂返回总是返回一个Promise,必须对此进行解决。

我更喜欢从服务/工厂返回承诺,因为我倾向于让其他类决定如何处理响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM