2014-09-27 59 views
0

我试图在服务中存储API响应,以便我可以在我的视图中访问它。在服务中存储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); 
    }); 

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

回答

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 
}, 
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承诺一起,以便getUser() - > storeUser()的异步调用将与控制器一起加载。