-2

I'm trying to set a value to a variable outside a promise. But when I check the value it prints undefined, I defined the variable outside the promise so I don't understand why its undefined

Here is my code, hope you can help me with that:

UserSchema.statics.findByToken = function (token) {
var User = this;
var decoded;

try{
    decoded = jwt.verify(token, 'secret');
} catch (err){

    if(err.name === 'TokenExpiredError'){

        var refreshToken;

        User.findOne({
            'tokens.token': token,
            'tokens.access': 'auth'
        }).then( (user) => {

            User.findOne({
                'tokens.token': token,
                'tokens.access': 'auth'
            }).then( (user) => {
                var access = 'auth';
                token = jwt.sign({_id: user._id.toHexString(), access}, 'secret', { expiresIn: 30 }).toString();

                refreshToken = token; // set value to refreshToken

                user.tokens.push({access, token});

                user.save().then( () => {
                     token = refreshToken;
                });
            });
        });


        console.log(refreshToken);  // refresh is undefined
        return Promise.reject({errName: 'TokenExpiredError', token: refreshToken});

    }

    return Promise.reject();

}

    return User.findOne({
       _id: decoded._id,
       'tokens.token': token,
       'tokens.access': 'auth'
    })
}
zb22
  • 3,126
  • 3
  • 19
  • 34

1 Answers1

0

The code executed in the then after the User.findOne is asynchronous. So it will be executed later. When you do console.log(refreshToken);, the code is not executed yet. So refreshToken is still undefined.

Magus
  • 14,796
  • 3
  • 36
  • 51