【问题标题】:How to get variable's value outside promise? [duplicate]如何在承诺之外获得变量的价值? [复制]
【发布时间】:2017-09-04 12:24:47
【问题描述】:

我正在尝试为承诺之外的变量设置一个值。 但是当我检查它打印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'
    })
}

【问题讨论】:

    标签: javascript node.js ecmascript-6


    【解决方案1】:

    User.findOne之后在then中执行的代码是异步的。所以稍后会执行。当您执行console.log(refreshToken); 时,代码尚未执行。所以refreshToken 仍然是未定义的。

    【讨论】:

    • 那我该怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2016-09-18
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多