angularjs - 从服务获取异步数据

标签 angularjs asynchronous angular-promise angular-services angularjs-http

我尝试在服务中请求一些数据。我想确保数据保存在服务的变量中,因为由于状态更改,我的 Controller 将一直重新加载,并且在站点加载时我只需要一次数据。

  app.service('resultDeals',['$translate','$cookies','$http',
    function($translate,$cookies,$http) {

      var currentOrigin = {};
      var originsUser={};

      return {

        loadOrigins:function() {
          $http.get('app/deals/deal.json').success(function(response){
            console.log(response);
            originsUser = response.data;
            return originsUser
          }).error(function(err){
            console.log(err);
          });
        },
        userOrigin:originsUser

      };

    }]);

我的 Controller 如下所示

console.log(resultDeals.loadOrigins());
    $scope.updateOrigins=resultDeals.loadOrigins();

问题是 resultDeals.loadOrigins() 始终未定义。

我想确保将从 loadOrigins() 获取的数据存储在服务变量中,并且仅在需要时从 Controller 访问它,以便当 Controller 重新加载时不必再获取数据。

我该怎么做?

最佳答案

不要使用 .success.error 回调函数,因为它们无法返回任何内容,因此无法继续 promise 链。而是在 $http.get 方法(返回一个 Promise 对象)上使用 .then 。当 promise 已解决拒绝 promise 时,它将能够返回数据。您可以从 Controller 方法继续 promise 链。

服务

return {
    loadOrigins: function() {
        return $http.get('app/deals/deal.json')
          .then(function(response) {
            console.log(response);
            originsUser = response.data;
            return originsUser
          }, function(err) {
            console.log(err);
          });
    },
    userOrigin: originsUser
};

Controller

resultDeals.loadOrigins().then(function(user){
   $scope.updateOrigins= user;
}, function(){
   console.log("Errror occurred.")
})

关于angularjs - 从服务获取异步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33277096/

相关文章:

javascript - 将 Controller 之间的数据存储为唯一的

javascript - 每个循环淡入淡出动画中的 jQuery 异步行为

wpf - 取消异步 WCF 请求的最佳方法是什么?

javascript - AngularJS 两个 http get 在一个 Controller 中出现问题

java - 使用 jwt token 身份验证识别用户

javascript - 使用 AngularJS 发布请求

javascript - $q 解析函数此时未触发

javascript - Jasmine 添加到 promise

javascript - AngularJS 的内联模板不适用于 XHTML

Swift:监听 url 属性然后下载照片