如何正确终止 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 之前做的最后一件事。其他任何事情都容易出错。
我最近开始使用 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 之前做的最后一件事。其他任何事情都容易出错。