我发现了一个删除某些集合中记录的函数示例。我修改它来做我一直在做的错误处理-返回一个returnVal
和一个returnMsg
。然而,我刚刚注意到它也有throw new Error("An error occurred while blocking user.");
线。如果我计划在我的index.ts
文件中使用这个函数作为我的Firebase项目的云函数,这一行将做什么?如果有一个错误,那么我的2个输出应该足以告诉调用函数发生了什么,但我不确定这个throw
行还会做什么。如果它完全退出进程的执行,那就不好了。我想自己处理出错时的流程。
/**
* Deletes the friend record with matching uid from the /users/{BlockedUID}/friends collection.
* @param {string} uid - The uid of the user who is blocking the friend.
* @param {string} blockedUid - The uid of the user who is being blocked.
* @return {Promise<{returnVal: number, returnMsg: string}>} A Promise that resolves with an object containing the return value and message.
*/
export async function blockUser(
uid: string,
blockedUid: string
): Promise<{ returnVal: number; returnMsg: string }> {
try {
// Delete friend record where uid = input uid
await admin
.firestore()
.collection(`users/${blockedUid}/friends`)
.doc(uid)
.delete();
console.log(`User with uid ${uid} successfully blocked.`);
return { returnVal: 1, returnMsg: "User successfully blocked." };
} catch (error) {
console.error(error);
throw new Error("An error occurred while blocking user.");
}
}
但我不确定这条扔线还能做什么。如果它完全退出进程的执行,那就不好了。
首先,JavaScript文档很容易找到,您可以找到throw
将做什么。从MDN:
throw语句抛出用户定义的异常。当前函数的执行将停止(throw之后的语句将不会被执行),并且控制权将传递给调用堆栈中的第一个catch块。如果调用函数中不存在catch块,程序将终止。
如果你不希望程序终止,你应该自己使用try/catch捕获错误,并决定从那里做什么。
试试……Catch语句由try块和Catch块、finally块或两者组成。首先执行try块中的代码,如果它抛出异常,则执行catch块中的代码。finally块中的代码总是在控制流退出整个构造之前执行。
所以,如果你想控制在调用blockUser时发生的事情,你应该使用try/catch。
或者,如果throw
不能为你工作,你可以编写你想执行的任何代码。