【发布时间】:2018-10-12 09:15:36
【问题描述】:
我有一个复杂的系统,它完全适用于 async/await。我想要的是在一个且仅 try/catch 块中处理来自异步函数的多种类型的错误。这意味着我从另一个异步函数调用此函数。
但是在父异步函数中处理异常的概念似乎失败了。在下面的示例中,我得到的只是关于未处理的承诺拒绝的警告,并且父级中的 catch 块永远不会出错。我也尝试过简单的抛出和错误,但也没有成功。
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();
我有一种感觉,我对执行这种特技的异步函数一无所知
【问题讨论】:
-
请注意:在
async函数中,您不需要写return Promise.reject(err);,您可以只写throw err。