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

标签 javascript angularjs

在我的 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/

相关文章:

javascript - 使用 JavaScript 在 MongoDB 中返回 _id 的脚本

angularjs - 使用 Angular 触发 CSV 文件下载

javascript - 如何从 Node 后端的 $http.post/angular 检索 post 变量?

javascript - 如何在 Node JS 中存储大型 Twitter 个人资料 ID

javascript - 是否有任何类似于 Whatever :hover htc? 的 jquery 插件或技术

AngularJS 使用 JWT 身份验证记住我的功能

javascript - 为什么 Angular JS 的行为不同?

javascript - 从文本更改更改大小的按钮的 CSS 或 JS 转换?

javascript - 如何从指令访问 Controller 中的方法

java - 为 javascript/java 使用不同的 ide