我是否需要使用firebase函数api将throw放入try-catch块中才能捕获它



我需要把throw放在try-catch块内才能被捕获吗?我正在使用firebase函数api

// Checking that the user is authenticated.
if (!context.auth) {
// Throwing an HttpsError so that the client gets the error details.
throw new functions.https.HttpsError('failed-precondition', 
'The function must be called while authenticated.');
} 
try {
await updateCustomerAccount(context.auth.uid, customer.id)
return {
status: 200,
};
} catch (err) {
console.log(err as Error);
return {
error: err.errorInfo,
status: 500,
}
}

在这种情况下,不需要您的throw在try/catch中。如果您希望函数在调用代码中出现有意义的错误而终止,则需要允许该异常从函数的顶层传播出去,以便云函数SDK能够处理该异常,并将其转换为HTTP错误供客户端接收。如果你把它放在try/catch中,那么函数将不会为客户端应用程序生成正确的错误代码和消息。

此外,如果您的可调用函数需要客户端身份验证,那么您应该使用";未经认证的";错误代码,而不是";失败的前提条件";代码,如文档中所述。

是的,您确实需要将throw关键字放置在try块中。trycatch块特别地仅在其在try块内的情况下捕获错误。

引用MDN:

throw语句抛出一个用户定义的异常。当前函数的执行将停止(throw之后的语句将不会执行(,控制权将传递给调用堆栈中的第一个catch块如果调用方函数之间不存在catch块,则程序将终止

相关内容

  • 没有找到相关文章

最新更新