theConstructor
theConstructor

Reputation: 119

Assign resolved promise to variable

I have a factory which returns token as

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;

In my header Interceptor, I need to get the token. Tried below code :

  var accessToken;

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

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

Every time I get accessToken as undefined. There should be an easy way to achieve this.

Upvotes: 1

Views: 1410

Answers (1)

Pankaj Parkar
Pankaj Parkar

Reputation: 136144

Because you are forming req.headers outside accessToken()'s ajax call. Which tend to make your res.headers object with undefined access_token. Ideally you should wait until accessToken() ajax gets complete & set your res.headers code inside accessToken().then.

Factory

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

Interceptor

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

Upvotes: 1

Related Questions