如何解决在 nodejs 中 res.render 之前设置变量
我正在尝试将 userGameList 设置为 User.games,但 res.render 不等待变量,第一个日志是我所期望的,但第二个是空字符串。我试过异步和等待。
app.get('/games',async (req,res) => {
var userGameList = "";
if (req.isAuthenticated()) {
User.findById(req.user.id,async function(err,foundUser) {
if (err) {
console.log(err)
} else {
if (foundUser) {
userGameList = await foundUser.games;
console.log(userGameList); // log with the right value
}
}
})
};
console.log(userGameList); // log empty string
res.render('pages/games-list',{
req: req,parentPage: "/",pageTitle: "Games",myUserGames: userGameList
});
解决方法
一旦 userGameList
在异步方法中可用,您就返回响应。
这是异步函数 (User.findById) 的本质,除非等待,否则将释放线程以供下一个代码块执行。一旦收到响应,异步函数就会执行回调。
app.get('/games',async (req,res) => {
var userGameList = "";
if (req.isAuthenticated()) {
User.findById(req.user.id,async function(err,foundUser) {
if (err) {
console.log(err)
} else {
if (foundUser) {
userGameList = await foundUser.games;
console.log(userGameList); // log with the right value
res.render('pages/games-list',{
req: req,parentPage: "/",pageTitle: "Games",myUserGames: userGameList
});
}
}
})
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。