将已解决的承诺分配给变量

时间:2017-02-02 22:35:13

标签: javascript angularjs angular-promise

我有一个工厂,将令牌返回为

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 个答案:

答案 0 :(得分:1)

因为您正在req.headers之外形成accessToken()的ajax电话。这往往会使您的res.headers对象具有未定义的access_token。理想情况下,你应该等到accessToken() ajax完成后才能完成。在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
});