gpt4 book ai didi

javascript - 将错误从一个异步函数传递到另一个

转载 作者:行者123 更新时间:2023-11-30 20:33:04 25 4
gpt4 key购买 nike

我有一个复杂的系统,它完全适用于异步/等待。我想要的是在一个且唯一的 try/catch block 中处理来自异步函数的多种类型的错误。这意味着我从另一个异步函数调用这个函数。
但是在父异步函数中处理异常的概念似乎失败了。在下面的示例中,我得到的只是关于未处理的 promise 拒绝的警告,并且父级中的 catch block 永远不会出错。我也尝试过简单地抛出和错误,但都没有成功。

const die = (word) => new Promise((resolve, reject) => reject(word));

const live = () => new Promise((resolve, reject) => resolve(true));

const daughterAsync = async () => {
await live();
try {
await die('bye');
} catch (err) {
return Promise.reject(err);
}
try {
await die('have a beatiful time');
} catch (err) {
return Promise.reject(err);
}
await live();
};

const parentAsync = async () => {
try {
daughterAsync();
} catch(err) {
console.log('error catched'); // never happens
console.log(err);
}
};

parentAsync();

我有一种感觉,我对执行这种特技的异步函数一无所知

最佳答案

您的 daughterAsync(); 行仅启动 promise 运行,但不会保存对它的引用或等待它解决。您需要在 parentAsynctry block 中 await daughterAsync 返回的 promise ,以便 捕获 daughterAsync 中的 错误:

const die = (word) => new Promise((resolve, reject) => reject(word));

const live = () => new Promise((resolve, reject) => resolve(true));

const daughterAsync = async () => {
await live();
try {
await die('bye');
} catch (err) {
return Promise.reject(err);
}
try {
await die('have a beatiful time');
} catch (err) {
return Promise.reject(err);
}
await live();
};

const parentAsync = async () => {
try {
await daughterAsync();
} catch(err) {
console.log('error catched');
console.log(err);
}
};

parentAsync();

关于javascript - 将错误从一个异步函数传递到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50131633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com