Javascript 如何使用异步调用更改工厂的变量?
我对Angularjs有点陌生,我正试图找到实现这种流动的最佳结构:Javascript 如何使用异步调用更改工厂的变量?,javascript,angularjs,Javascript,Angularjs,我对Angularjs有点陌生,我正试图找到实现这种流动的最佳结构: 从我的服务器异步获取访问令牌 将其存储在提供程序中,作为将来使用的变量 使用access\u令牌对第三方服务器进行异步调用 我的工厂现在看起来像这样 app.factory('SomeFactory',['$resource', function($resource){ //access_token only needs to be set once var access_token = 0; var
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});
}])
我无法设置访问令牌,回调函数将被破坏
另外,如何形成一个链,以便在首先设置访问令牌之前无法调用第三方?试试这个
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;
}]);
有必要把它作为一个工厂吗?我的意思是有必要从工厂返回$resource吗?不一定,因为我是来自后端开发人员的angularjs新手,我只是想避免使用样板代码。有没有更好的设计模式更适合我的目的?谢谢你的回复。我在第二个
deferred=$q.deferred()
处得到一个错误,我猜它被推迟到了早期?错误消息类似于$q没有函数defer