2017-09-04 11 views
-2

私は約束の外の変数に値を設定しようとしています。 しかし、ときに私は、私はここでそのundefined約束の外で変数の値を取得するには?

が私のコードである理由私は理解していない約束外の変数を定義し 、それは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

User.findOneの後にthenで実行されるコードは非同期です。それは後で実行されるでしょう。 console.log(refreshToken);を実行すると、コードはまだ実行されません。だからrefreshTokenは未定義です。

+0

どうすればいいですか? – zb22

関連する問題