我的顶部/外部方法“f”有以下代码:
async function f() {
await g().catch(err => {...});
...
}
这是在 f() 中执行的方法:
async function g() {
await something(); // Can fail because of server problems...
if (true) {
throw new functions.https.HttpsError("cancelled", "Some custom message");
}
}
现在,如果在 f 中,我想将错误作为函数的实例抛出。https.HttpsError,我想这样做:
async function f() {
await g().catch(err => {
console.error(err);
throw new functions.https.HttpsError("unavailable", "Server error") // Unexpected errors... Will be good for errors coming from calling something() in g()
/* Note: HttpsError -> constructor(type, message) */
});
...
}
如您所见,我正在处理一般错误,类型为“不可用”和一般消息“服务器错误”。
但是......来自条件的错误会发生什么?我怎样才能在 f() 中抓住它,然后扔掉它?它的类型是“已取消”,消息是“一些自定义消息”,但这样我处理错误会导致问题,因为“自定义”错误是我在外部抛出的同一类错误的实例从内部捕获错误时的函数。
我想扔一个物体
async function g() {
...
if (true) {
const error = {
type: "cancelled",
message: "custom error",
}
throw error;
}
}
然后,在 f() 中执行:
await g().catch(err => {
console.error(err);
throw new functions.https.HttpsError(err.type || "unavailable", err.message || "Server error") // Unexpected errors... Will be good for errors coming from calling something() in g()
/* Note: HttpsError -> constructor(type, message) */
});
但是代码看起来不干净。这是处理这些情况的常用方法吗?其他更好的
谢谢。方式?
答案 0 :(得分:0)
如果您想将从 g()
得到的错误转换为其他错误,惯用的方法是使用 catch
块:
async function f() {
try {
await g();
// ...perhaps other things here as well...
} catch (err) {
console.error(err);
throw new functions.https.HttpsError("unavailable", "Server error");
}
// ...
}
请记住,在 async
函数中,如果承诺被拒绝,await promise
将引发错误。您可以使用 catch
捕获该错误,就像同步错误一样。