我试图将userGameList设置为User。游戏,但res.render不等待变量,第一个日志是我所期望的,但第二个是空字符串。我试过async和await。
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
});
在async方法中userGameList
可用时返回响应。
这是async函数(User.findById)的本质,除非等待,否则将释放线程以执行下一个代码块。一旦收到响应,async函数执行回调。
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
});
}
}
})
};