快速路由挂起异步等待

Posted

技术标签:

【中文标题】快速路由挂起异步等待【英文标题】:Express route hanging async await 【发布时间】:2018-07-09 19:04:58 【问题描述】:

我正在将我的应用程序转换为使用 async/await 而不是回调在后端发出的查询请求。到目前为止一切顺利,但我遇到了一些障碍。我的页面挂在获取路线上,而不是呈现 ejs 页面。服务器的控制台也会显示,

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

错误消息涉及未处理的承诺,但这只是包装实际错误,即: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 上方使用 let 定义 qryFindLocalID

【讨论】:

以上是关于快速路由挂起异步等待的主要内容,如果未能解决你的问题,请参考以下文章

使用异步等待自动尝试捕获路由器控制器

React-Router:如何在路由转换之前等待异步操作

异步 new Vue() 等待初始认证

如何让 Python FastAPI 异步/等待功能正常工作?

vue路由跳转取消上个页面的异步请求

登陆路由器时,显示401错误的红色页面,这个怎么解决,而却之前路由器只要关掉以后就无法再次连接网络