首页 > 解决方案 > 无法使用节点 js 上的异步函数为变量赋值

问题描述

我试图从用户那里获取 jwtauthtoken 并将其传递给在该 js 文件中导入的 getuserId()。但是我得到的是未定义的值,而不是函数返回的解码 id。

在 getUserId() 它显示解码的令牌

我的控制台输出:

用户 ID 5f68efb234a7656

在获取请求时:未定义

任何人都可以帮助我解决问题。

个人详细信息控制器.js

module.exports.personaldetail_get = async (req,res) => {

    const token = req.cookies.jwtauthtoken;

        let userId = await getUserId(token);
        console.log("On get request : "+ userId); // output On get request : undefined

    res.render('Candidate/personal', { csrfToken: req.csrfToken() });

}

getUserId.js

module.exports.getUserId =  (tokenid) => {

    const token = tokenid;

    try{

        if (token) {

            jwt.verify(token,'2308199919990823', async (err, decodedToken) => {
                if(err){
                    console.log(err);
                    return null;
                } else {
                    console.log("user id " + decodedToken.id); // Output user id 5f68efb234a7656
                    return decodedToken.id;
                }

            });
        } else {
            return null;
        }

    }
    catch(err)
    {
        console.log(err)
        return null;
    }

}

标签: javascriptnode.jsexpressasynchronousasync-await

解决方案


const decodedToken = await getUserId(token)意味着两件事:

  • getUserId 必须返回一个 Promise。
  • decodedToken由本承诺的决议给出。
getUserId = tokenid => {
    return new Promise(resolve => {
        jwt.verify(tokenid, '2308199919990823', (err, decodedToken) => resolve(decodedToken))
    })
}

推荐阅读