如何在 catch 语句之外拒绝异步/等待?
Posted
技术标签:
【中文标题】如何在 catch 语句之外拒绝异步/等待?【英文标题】:How to reject in async/await outside of catch statement? 【发布时间】: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 块内投掷都没有关系。 【参考方案1】:您通常在可能的情况下使用throw
,即在async function
s 或then
回调中,因为它更简单,因此更易于阅读。 return Promise.reject(…)
确实有效,但很长。
【讨论】:
以上是关于如何在 catch 语句之外拒绝异步/等待?的主要内容,如果未能解决你的问题,请参考以下文章
Node.JS - 无法使用try / catch块获得异步抛出
如何在“react-dropzone”的“onDrop”中使用异步等待? (解析错误:不能在异步函数之外使用关键字'await')