首页 > 解决方案 > 如何在异步函数中抛出错误并仅在非立即调用者中处理?

问题描述

使用 Javascript 中的常规函数​​,您可以在调用堆栈中抛出错误并在非立即调用者中处理它,如下所示:

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

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

但是在异步(异步/等待)函数中,似乎需要在每一步都处理错误。

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

标签: javascriptasync-await

解决方案


但是在异步函数中,似乎需要在每一步都处理错误。

不是这种情况。就像 Promises 一样,只是catch在你需要捕获错误的级别。毕竟async函数 return :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!!"));


推荐阅读