如何在异步函数中引发错误并仅在非立即调用方中处理错误?

时间:2018-07-05 05:44:07

标签: javascript async-await

使用Javascript中的常规函数​​,您可能会在调用堆栈中抛出一个错误,并在非立即调用程序中对其进行处理,如下所示:

var a = function () {
    throw new Error ("MyError!!!!");
};
var b = function () {
    a();
};

try {
    b();
} catch (e) {
    console.log ("CAUGHT!!");
}

但是在异步(async / await)函数中,似乎错误需要在方法的每个步骤中进行处理。

如果我在异步函数中有一些可重用的功能,需要抛出一个错误,有没有一种方法可以在非立即调用方上处理错误(例如在示例中-将调用堆栈降级为2而不是1)所以我不会在样板中覆盖使用它的N个功能和使用这N个功能的M个功能?

1 个答案:

答案 0 :(得分:1)

  

但是在异步函数中,似乎错误需要在方法的每个步骤中进行处理。

情况并非如此。就像承诺一样,只需catch即可捕获错误。毕竟,async个函数返回Promises

var a = async function () {
    throw new Error ("MyError!!!!");
};
var b = async function () {
    await a();
};
var c = async function () {
    await b();
};

c().catch(e => console.log ("CAUGHT!!"));