Javascript-从内部函数和外部函数中抛出不同的错误
我的顶部/外部方法“f”有以下代码: 对于在f()中执行的方法,这个函数是: 现在,如果在f中,我想将错误作为functions.https.HttpsError的实例抛出,我想做:Javascript-从内部函数和外部函数中抛出不同的错误,javascript,async-await,try-catch,Javascript,Async Await,Try Catch,我的顶部/外部方法“f”有以下代码: 对于在f()中执行的方法,这个函数是: 现在,如果在f中,我想将错误作为functions.https.HttpsError的实例抛出,我想做: async function f() { await g().catch(err => { console.error(err); throw new functions.https.HttpsError("unavailable", "Se
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()抓住它,然后扔掉它?它的类型是“cancelled”,消息是“Some custom message”,但这样处理错误会导致问题,因为“custom”错误是我从内部捕获错误时在外部函数中抛出的同一类错误的实例
我想扔个东西
async function g() {
...
if (true) {
const error = {
type: "cancelled",
message: "custom error",
}
throw error;
}
}
然后,在f()中,执行以下操作:
但是代码看起来并不干净。这是处理这些情况的常用方法吗?还有更好的吗
多谢各位。方法?如果要将从
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
捕捉该错误,就像同步错误一样。但是,如果g()抛出的错误类型和消息与我在f()中抛出的错误类型和消息不同,那么抛出对象{type:“x”,message:“x”}是正确的然后像我在问题中描述的那样抓住它?@Raul-恐怕我不明白你在问什么。您是否在询问async
函数中异常的机制?或者你扔的东西的内容?或
async function g() {
...
if (true) {
const error = {
type: "cancelled",
message: "custom error",
}
throw error;
}
}
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) */
});
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");
}
// ...
}