挂起异步的快速路线等待

时间:2018-01-30 19:31:34

标签: javascript node.js express asynchronous async-await

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

  

(节点:7036)
  UnhandledPromiseRejectionWarning:未处理的promise promise(拒绝ID:1):ReferenceError:未定义qryFindLocalID   (节点:7036)。
  [DEP0018]弃用警告:未处理的承诺拒绝是depreca   特德。将来,未处理的承诺拒绝将终止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
  }); 
});

1 个答案:

答案 0 :(得分:2)

错误消息说明未处理的承诺,但这只是包装实际错误,即: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作用于该函数),或使用qryFindLocalID定义let上面的try-catch