我正在将我的应用程序转换为使用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
。