在 express 中结束 HTTP 请求之前调用异步函数

Calling async functions before ending HTTP Request in express

我的快递服务器上有以下路线:

router.post("/doHeavyTask", async function (req, res) {

       
       const status = heavyTask(req)
       
       logAction(HEAVY_TASK) // logAction is defined below                  

       return res.status(status).send()


})

和以下日志函数,它只是将文档插入我的 mongoDB 数据库:

export function logAction(type: USER_LOG_TYPES){

  const db = getAppDatabase()
  const userLog: UserLog = {
    logType: type
  }
      
  getAppDatabase().db.collection('UserLogs').insertOne(userLog).then((insertedDoc) =>   {

      // ...
      // handle success
      return

    }).catch((error) => {

      // ... 
      // handle failure
      return
    
   })
}

在结束 HTTP 请求之前调用异步函数(在我的例子中是 logAction)会导致任何问题吗?有什么需要注意的吗?

真的取决于你的繁重任务是做什么的。如果它涉及到稍微改变用户状态,那么在你完成 res.send() 之后,用户可能会有一个替代状态。

E.x。如果 HEAVY TASK 只是将日志添加到数据库中,您可以这样做并告诉用户它正在由 res.send() 插入,理论上没问题。

但是如果 TEAVY TASK 想要做一些像更改用户名这样的事情,那么当你点击 res.send() 时,任务仍然是 运行 并且用户暂时仍然看不到他们的用户名已更改。