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

How to change the variables of a factory with async call?

本文关键字:工厂 变量 何使用 异步 调用      更新时间:2023-09-26

我对Angularjs有点陌生,我正在努力寻找实现这种流的最佳结构:

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

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

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之前不能调用第三方?

尝试这个

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;
}]);