2017-02-02 62 views
1

我有一個工廠,返回令牌分配解決承諾可變

var accessToken = Restangular.all(url); 
      accessToken.one('token').get() 
       .then(function(res) { 
       deferred.resolve(res.data); 
       }) 
       .catch(function(errRes) { 
       deferred.reject(errRes); 
       }); 
      return deferred.promise; 

在我的頭攔截器,我需要獲得令牌。以下代碼嘗試:

var accessToken; 

       $injector.get('tokenService').accessToken().then(function(res) { 
       accessToken = res.access_token; 
       }, function(e) { 
       // error 
       }); 

      req.headers = _.extend({ 
       'Authorization': 'Bearer ' + accessToken 
       }, req.headers); 

每當我獲得accessToken作爲undefined。應該有一個簡單的方法來實現這一點。

回答

1

因爲您正在accessToken()的外部形成req.headers的ajax呼叫。這往往會使您的res.headers對象具有未定義的access_token。理想情況下,你應該等到accessToken()阿賈克斯完成&設置res.headers代碼accessToken().then

var accessToken = Restangular.all(url); 
    return accessToken.one('token').get() 
     .then(function(res) { 
      return res.data; 
     }) 
     .catch(function(errRes) { 
      return errRes; 
     }); 
} 

攔截

var accessToken; 
$injector.get('tokenService').accessToken().then(function(res) { 
    accessToken = res.access_token; 
    req.headers = _.extend({ 
     'Authorization': 'Bearer ' + accessToken 
    }, req.headers); 
}, function(e) { 
    // error 
}); 
+0

感謝潘卡,正是我需要的。 – theConstructor