在nodejs中res.render之前设置变量



我试图将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
            });
        }
      }
    })
  };

最新更新