如何使用异步调用更改工厂的变量?

时间:2015-04-08 05:55:22

标签: javascript angularjs

我是Angularjs的新手,我正在努力找到做这种流程的最佳结构:

  1. 异步从我的服务器获取access_token
  2. 将其作为将来使用的变量存储在提供程序中
  3. 使用access_token
  4. 对第三方服务器进行异步调用

    我的工厂目前看起来像这样

    app.factory('SomeFactory',['$resource', function($resource){
        //access_token only needs to be set once
        var access_token = 0; 
        var request = $resource('/my/server/').get();
        request.promise.then(function(result){
                access_token = result;
            }
    
        );
        return $resource('https://third.party/:token',{token: access_token});
    }])
    

    我无法设置access_token,回调函数会以某种方式被破坏。

    另外我如何形成一个链,以便在首先设置access_token之前不能调用第三方?

1 个答案:

答案 0 :(得分:0)

试试这个

app.factory('SomeFactory',['$resource, $q', function($resource, $q){
    var service = {};

    //access_token only needs to be set once
    var access_token = null; 

    getAccessToken = function() {
        var deferred = $q.defer();

        if (access_token) {
            deferred.resolve(access_token);
        } else {
            $resource('/my/server/').then(function(result){
                access_token = result;
                deferred.resolve(access_token);
            });    
        }

        return deferred.promise;    
    }

    service.callThirdParty = function() {

        var deferred = $q.defer();

        getAccessToken.then(function(access_token) {
            $resource('https://third.party/:token',{token: access_token}).then(function(result) {
                deferred.resolve(result);
            })
        })

        return deferred.promise;
    }


    return service;
}]);