从承诺拒绝的功能返回

时间:2018-04-18 12:11:20

标签: node.js promise

我有两个功能。一个叫做某个东西,另一个叫做它,asyncfunc。我的问题是,如果在asyncfunc中,函数会抛出一个错误,我想停止执行函数的其余部分并返回。我发现如果我在catch中重新抛出错误,我可以得到那种行为,但我需要在之后添加另一个catch。

那么如果任何承诺被拒绝,我该如何从函数返回? (在这种特殊情况下,它们是一个接一个,所以我想我可以使用.then,但如果它们没有嵌套,我想要相同的结果。)

async function something()
{
    await asyncfunc().catch(e => console.error(e));
}

async function asyncfunc()
{
    await some_promise.catch(err => { throw new Error(err) }); // Error gets swallowed unless I add another catch

    await some_promise2.catch(err => { throw new Error(err) }); // Error gets thrown here, return and don't execute promise 3

    var data = await some_promise3.catch(err => { throw new Error(err) });

    return data;
}

1 个答案:

答案 0 :(得分:1)

您可以在something()函数中捕获错误,并且asyncFunc可以被链接以在抛出时传播错误:

function something()
{
    // You dont need to call async/await, if you are not returning 
    // and this function only has one call.
    asyncfunc().catch(e => console.error(e));
}

// Notice I have removed "async"
function asyncfunc()
{
    // its a simple case of chain of Promises.
    // to execute it serially you can chain it like this;

    return some_promise
         .then(some_promise2)
         .then(some_promise3)
         .catch(error => {
             // you can do something like 'log' it
             throw error;
         })
}