Node.js中res.render前设置变量异步赋值后仍为空如何解决?
问题原因
- 核心是异步执行逻辑顺序错误:
User.findById传入回调函数时属于回调式异步调用,不会返回Promise,外层路由的async逻辑无法感知该异步操作的执行进度,会直接执行后续的console.log与res.render代码,此时回调里的赋值逻辑还未触发,所以userGameList还是初始的空字符串。 - 代码中
await foundUser.games属于不必要写法:如果games是用户模型的关联属性,只要成功查询到用户数据就可以直接读取,不需要额外await。
修复方案
将回调式调用改为async/await的Promise调用形式,确保数据库查询完成后再执行后续逻辑,修复后代码如下:
app.get('/games', async (req, res) => { let userGameList = ""; if (req.isAuthenticated()) { try { // 等待数据库查询完成再往下执行 const foundUser = await User.findById(req.user.id); if (foundUser) { userGameList = foundUser.games; console.log(userGameList); } } catch (err) { console.log(err); } } console.log(userGameList); res.render('pages/games-list', { req: req, parentPage: "/", pageTitle: "Games", myUserGames: userGameList }); });
内容的提问来源于stack exchange,提问作者Artemis
相关产品推荐
相关产品推荐

