我正在尝试将值设置为promise之外的变量。
但当我检查它打印的值undefined
时,
我在promise之外定义了变量,所以我不明白为什么它是undefined
这是我的代码,希望你能帮助我:
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'
})
}
答案 0 :(得分:0)
then
之后User.findOne
中执行的代码是异步的。所以它将在以后执行。执行console.log(refreshToken);
时,代码尚未执行。所以refreshToken
仍未定义。