我正在将我的应用程序转换为使用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
});
});
答案 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