无法在节点js上使用异步函数为变量赋值

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


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


我的控制台输出:


用户 ID 5f68efb234a7656


在获取请求时:未定义


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


personalDetailsController.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;

    }


}


呼如林
浏览 106回答 2
2回答

芜湖不芜

const decodedToken = await getUserId(token)意味着两件事:getUserId 必须返回一个 Promise。decodedToken由本承诺的决议给出。getUserId = tokenid => {     return new Promise(resolve => {         jwt.verify(tokenid, '2308199919990823', (err, decodedToken) => resolve(decodedToken))     }) }

哈士奇WWW

你忘了在你的函数调用中添加一个return...此外,您拥有的 try catch 块将不起作用,因为您的验证函数是异步的……您需要将其包装在 Promise 中……module.exports.getUserId =  (tokenid) => {    const token = tokenid;    if (token) {        return new Promise((reject, resolve) => {            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 resolve(decodedToken.id);                }            });        });    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript