javascript - 无法使用节点 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;
}
}
解决方案
const decodedToken = await getUserId(token)
意味着两件事:
- getUserId 必须返回一个 Promise。
decodedToken
由本承诺的决议给出。
getUserId = tokenid => {
return new Promise(resolve => {
jwt.verify(tokenid, '2308199919990823', (err, decodedToken) => resolve(decodedToken))
})
}
推荐阅读
- ajax - 查找通过 AJAX 加载的 URL
- javascript - 如何清除if语句中的间隔
- visual-studio-code - vscode live 服务器端口设置不起作用,总是在 localhost:8081 中打开
- c# - 如何在关闭事件时不冻结 wpf 应用程序
- python - 为 pypy3 OS Debian 安装 pip 和 numpy
- javascript - Node.js:Socket.io 发出方法未触发
- java - JSoup 未完全呈现长页面
- javascript - 更改 div 时重新启动 javascript 变量
- c# - EF Core 3 未在第二级或更深层次加载相关数据
- django - 在 Django 应用程序中显示 PDF 并且需要选择一个被单击的单词并在警报框中显示相同的单词