0
votes

I am converting my application to use async/await instead of callbacks for query request made on the backend. It's been going good so far, but I am on a bit of a snag. My page is hanging on getting a get route and not rendering the ejs page. The console from the server also displays,

(node:7036)
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: qryFindLocalID is not defined (node:7036) .
[DEP0018] DeprecationWarning: Unhandled promise rejections are depreca ted. In the future, promise rejections that are not handled will terminate the Nod e.js process with a non-zero exit code.

Any help would be appreciated. The code so far is,

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

1 Answers

2
votes

The error message talks about an unhandled promise, but that's just wrapping the actual error, which is: ReferenceError: qryFindLocalID is not defined.

So where are you using qryFindLocalID? Ah, right at the bottom in the res.render call.

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

Now why is qryFindLocalID undefined here? You defined it above in the try-catch block. But there's your problem -- You used const, so qryFindLocalID only exists in the try-catch. Outside of that, it doesn't exist.

You can fix that by using var in the try-catch (var is scoped to the function), or define qryFindLocalID using let ABOVE the try-catch.