将错误从一个异步函数传递给另一个异步函数

时间:2018-05-02 09:48:49

标签: javascript async-await

我有一个复杂的系统,完全适用于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();

我有一种感觉,我没有得到关于执行这种特技的异步功能

1 个答案:

答案 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();

相关问题