我正在将我的应用程序转换为使用async / await,而不是在后端进行查询请求的回调。到目前为止,一切都很好,但是我有点a。我的页面挂在获取路线上,而不呈现ejs页面。服务器上的控制台也会显示,


  (节点:7036)
  UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):ReferenceError:未定义qryFindLocalID
  (节点:7036)。
  [DEP0018]弃用警告:弃用未处理的承诺
  泰德将来,未处理的承诺拒绝将终止Nod
  具有非零退出代码的e.js进程。


任何帮助,将不胜感激。
到目前为止的代码是

router.get("/secure", async (req, res) => {
  let user = req.session.passport.user;

  try {
    if (user.chkUserStatus) {
      if (user.lWaterLabID == 0 || user.lWaterlabID == -9999) {
        // in both cases sLabID is set to 0
        // assign the correct value for sLabName
        user.sLabName = user.lWaterLabID == 0 ? "Site Admin" : "Uber Admin";
      } else {
        let labName = await request.query(
          "Some Query"
        );

        user.sLabName = labName[0].sLabName;
      }
    } else {
      // Houston we've got a problem ...
      // user.chkUserStatus is not truthy

      req.flash("loginMessage", "User Status is invalid.");
      res.redirect("/");
    }

    const qryFindLocalID = await request.query(
      `Some Query`
    );

    if (user.lWaterLabID == 0) {
      const listRecentReports = await request.query(Some Query);
    }  else {
      const listRecentReports = await request.query(Some Query);
    }
  } catch (err) {
    // ... error checks
  }

  res.render("secure/index", {
    qryFindLocalID: qryFindLocalID,
    user: user,
    listRecentReports: listRecentReports
  });
});

最佳答案

该错误消息讨论了未处理的承诺,但这只是包装了实际错误,即:ReferenceError: qryFindLocalID is not defined

那么,您在哪里使用qryFindLocalID?嗯,就在res.render调用的底部。

res.render("secure/index", {
  qryFindLocalID: qryFindLocalID,
  user: user,
  listRecentReports: listRecentReports
});


现在为什么在这里未定义qryFindLocalID?您在上面的try-catch块中定义了它。但这是您的问题-您使用了const,因此qryFindLocalID仅存在于try-catch中。除此之外,它不存在。

您可以通过在try-catch中使用var来解决此问题(var作用于函数),或在try-catch之上使用qryFindLocalID定义let

08-28 10:55