我有點新Angularjs,我試圖找到最佳的結構做這樣的流程:如何使用異步調用更改工廠的變量?
- 從我的服務器異步
- 儲存於一個供應商獲取一個的access_token作爲要使用的變量在未來
- 製作異步調用與 的access_token
我廠目前看起來像這樣
第三方服務器我無法設置access_token,回調函數被以某種方式銷燬。
另外我怎樣才能構成一個鏈,這樣第三方不能被調用,直到access_token被設置爲第一個?
我有點新Angularjs,我試圖找到最佳的結構做這樣的流程:如何使用異步調用更改工廠的變量?
我廠目前看起來像這樣
第三方服務器我無法設置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;
}]);
感謝您的回覆。我在第二個'deferred = $ q.defer()'時得到一個錯誤,我猜測它被推遲到了早期?錯誤信息是'$ q沒有函數延遲' – Bonk
@Yonk我在代碼中做了一些更改 –
是否有必要把它作爲一個工廠?我的意思是有必要從工廠返回$資源? – Anonymous
不一定,因爲我是來自後端開發者的angularjs的新手,我只是想避免樣板代碼。有更好的設計模式更適合我的目的嗎? – Bonk