如何正确终止 HTTP 云函数

How to Properly Terminate an HTTP Cloud Function

我最近开始使用 Firebase Cloud Functions,对于如何适当地终止此 HTTP 函数我有点困惑:

exports.UpdateUserInfo= functions.https.onRequest( async (request, response) => {
    
    try{
      //Make a read call to Realtime DB
      const snapshot = await admin.database().ref('/UserData').get()
      if (snapshot.exists() == false) {
        response.send("No users found")
        return null 
      }
      //All of the remaining code within the scope of the try block executes
     functions.logger.log("Wait, this function should have ended")
     let updateUserInfo = await userInfoUpdater(response)
    }
     catch{
      functions.logger.info(error);
      response.status(500).send("ERROR")
    }

})

据我所知,终止 HTTP 函数的正确方法是通过响应对象发送响应。但是,似乎除非我包括对 return null 的最终调用,否则该函数将继续执行超出其预期寿命。更糟糕的是,该函数终止并仍然允许执行额外的网络调用,使事情变得非常不可预测和无组织(see logs)。一旦满足条件,我想阻止该功能继续。 returning null 是确保正确终止的最佳方法,还是我遗漏了什么?

调用response.send()不会立即终止函数。它只是向 Cloud Functions 发出信号,表明该函数应该在当前代码块 returns 之后关闭,可以通过 return 语句或从函数块的末尾退出。如果该函数不是以这两种方式之一 return,那么 Cloud Functions 将超时或出现其他问题,因为 CPU 在发送响应后很快就会被限制。

本质上,发送响应应该是函数在 return 之前做的最后一件事。其他任何事情都容易出错。