我有一个复杂的系统,完全适用于async / await。我想要的是在一个只有try / catch块的异步函数中处理多种类型的错误。这意味着我从另一个异步函数调用此函数 但是在父异步函数中处理异常的概念似乎失败了。在下面的例子中我得到的 - 只是一个关于未处理的promise拒绝的警告,并且父级中的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();
我有一种感觉,我没有得到关于执行这种特技的异步功能
答案 0 :(得分:1)
您的daughterAsync();
行仅启动承诺运行,但它不会保存对它的引用或等待它解析。您需要await
daughterAsync
parentAsync
块内try
返回的承诺catch
中的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();