2015-04-08 53 views
0

我有點新Angularjs,我試圖找到最佳的結構做這樣的流程:如何使用異步調用更改工廠的變量?

  1. 從我的服務器異步
  2. 儲存於一個供應商獲取一個的access_token作爲要使用的變量在未來
  3. 製作異步調用與
  4. 的access_token

我廠目前看起來像這樣

第三方服務器

我無法設置access_token,回調函數被以某種方式銷燬。

另外我怎樣才能構成一個鏈,這樣第三方不能被調用,直到access_token被設置爲第一個?

+0

是否有必要把它作爲一個工廠?我的意思是有必要從工廠返回$資源? – Anonymous

+0

不一定,因爲我是來自後端開發者的angularjs的新手,我只是想避免樣板代碼。有更好的設計模式更適合我的目的嗎? – Bonk

回答

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

感謝您的回覆。我在第二個'deferred = $ q.defer()'時得到一個錯誤,我猜測它被推遲到了早期?錯誤信息是'$ q沒有函數延遲' – Bonk

+0

@Yonk我在代碼中做了一些更改 –