javascript - 如何在异步函数中抛出错误并仅在非直接调用者中处理它?

标签 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 函数?

最佳答案

But in async functions it seems the error needs to be handled on every step of the way.

事实并非如此。就像 Promises 一样,只需在需要捕获错误的级别 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!!"));

关于javascript - 如何在异步函数中抛出错误并仅在非直接调用者中处理它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51184098/

相关文章:

javascript - d3.js 流图上的 MNaN 和 NaN 坐标

javascript - 获取异步/等待数据并以 html 格式显示/返回

javascript - 淡入完成后淡出后异步/等待超时

Javascript:将对象分配给 const 变量与 let 变量

javascript - 如何滑动切换 Selectize.js 下拉菜单?

javascript - 当从异步函数返回 Promise 时会发生什么?

node.js - 无法捕获 for wait of 循环中的错误

c# - 如何使用 async/await 在 UI 线程上异步运行多个任务?

javascript - 空注入(inject)器错误 : StaticInjectorError(DynamicTestModule) When Testing in Angular 2

javascript - 如何统计用户在html中写入了多少个属性名称和值