【问题标题】:How to reject in async/await outside of catch statement?如何在 catch 语句之外拒绝异步/等待?
【发布时间】:2019-05-17 12:22:45
【问题描述】:

正如this SO post and answer 所述,习惯上从位于 async/await 函数中的 catch 语句抛出错误,如下所示:

} catch (error) {
    throw new Error(400);
}

正如同一篇文章所强调的,您通常不会返回被拒绝的承诺(见下文),因为它与“try-catch”语句的语义不匹配。

} catch (error) {
    return Promise.reject(new Error(400));
}

按照同样的逻辑,当从我的 async/await 函数返回 catch 语句之外的错误而不是抛出它们时,我应该返回被拒绝的承诺吗?

也就是说下面的语义和上面的逻辑是不一致的吗?

async function promise () {
    throw new Error('Some error');
}

而且,这是在 async/await 函数中返回错误的首选方式,因为 async/await 函数隐式返回一个承诺?

async function promise () {
    return Promise.reject(new Error(400));
}

我知道上述两个 sn-ps 都允许在使用 Promise 时捕获错误。

【问题讨论】:

  • IMO,你只是抛出错误。无论你是否在 catch 块内投掷都没有关系。

标签: javascript asynchronous promise async-await


【解决方案1】:

您通常在可能的情况下使用throw,即在async functions 或then 回调中,因为它更简单,因此更易于阅读。 return Promise.reject(…) 确实有效,但很长。

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 2019-12-09
    • 2019-03-06
    • 2021-10-22
    • 2017-07-30
    • 2020-02-11
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    相关资源
    最近更新 更多