在服务中存储API响应

时间:2014-09-27 17:43:31

标签: angularjs

我试图在服务中存储API响应,以便我可以在我的视图中访问它。

这是我服务中的功能。它通过我的控制器访问时工作得很好,但我只想运行一次这个API调用,然后将结果存储在服务单例中。我使用https://oauth.io/docs/api-reference/client/javascript的Javascript API来访问用户信息。

getUser: function() {

  var deferred = $q.defer();
  var promise = authorizationResult.me().done(function(user_info) {
      username = user_info.alias // username is defined outside of function
      deferred.resolve(user_info);
  });

  return deferred.promise;
    }

然后我有了存储功能:

storeUser: function() {
        return username;
    },

我一直在玩它,在我最近的尝试中,我试图通过另一家工厂调用getUser()方法。重要的是我想只调用一次getUser()。然后在我的控制器中,我想依靠storeUser()来访问我需要的数据。

这是我控制器中的当前getUser()调用:

twitterService.getUser().then(function(data){  // I need to change this to storeUser()
      $scope.datapls(data.alias);
    });

谢谢!我感谢任何和所有的帮助。

2 个答案:

答案 0 :(得分:0)

You can use $cookiesStore of Angularjs for this. Inject $cookiesStore in your Service.
Then When u call your API For First Time Store username in cookies like this 

//Add Cookie Storing Code in Your Function
getUser: function() {

       var deferred = $q.defer();
       var promise = authorizationResult.me().done(function(user_info) {
       username = user_info.alias // username is defined outside of function
       $cookies.userName=username// Storing UserName in Cookies....
       deferred.resolve(user_info);
   });
  return deferred.promise;
 }

//Change Your Storage Function Like This
storeUser: function() {
    return $cookies.userName; //Return Username Stored in Cookies 
},

答案 1 :(得分:0)

想出来。

我扩展了其他工厂的想法。

我用这个工厂调用getUser()函数

app.factory('InitEverything', function(twitterService, $q) { 

twitterService.initialize();
   var deferred = $q.defer();
   var promise = twitterService.getUser().then(function(data) {
            console.log("init ran");
            deferred.resolve(data);
        });

   return deferred.promise;
});

然后我从控制器调用InitEverything,如下所示:

InitEverything.then(function(){
  if (twitterService.isReady()) {
     $scope.userhandle = twitterService.storeUser();  
     $scope.datapls($scope.userhandle);
  } 
});

所以看起来我需要将2个Promise链接在一起所以来自getUser()的异步调用 - > storeUser()将加载控制器。