前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >try/catch 中的return wait

try/catch 中的return wait

原创
作者头像
泽霖
发布2024-01-29 23:49:06
660
发布2024-01-29 23:49:06

标题可能听起来有些奇怪,看到标题是可能我们脑海中首先想到的是:“Eslint 告诉我要去掉 await,在 return 后面不需要 await”。

但我们的情况与之不同,当我们将我们的 promise 包装在 try/catch 中时。

代码语言:javascript
复制
async function foo() {
  try {
    return await waitAndMaybeReject();
  } catch (e) {
    return 'caught';
  }
}

这也适用于当我们不需要返回 promise 的已解决值时。如果返回的 promise 在 try/catch 中,我们总是需要 await,来捕获错误的。

通过返回一个 promise,我们推迟了它的结果,因此我们的 catch 块永远不会执行。这也会发生在不等待 promise(无论是否返回)时。

只有在 try/catch 块之外,return await 才是多余的。甚至有一个 Eslint 规则,但该规则是允许在 try/catch 中使用 return。

如果我们想在 return 语句之后打印一些内容,而不是临时创建一个变量、打印然后返回,像下面这样:

代码语言:javascript
复制
async function foo() {
  const res = await fetch();
  console.log('after fetch')
  return res;
} 

我们可以使用 try 和 finally 包裹 return(当然,除非我们需要打印 promise 的已解决值),像下面这样:

代码语言:javascript
复制
async function foo() {
  try {
    return await fetch();
  } finally {
    console.log('after fetch')
  }
} 

我正在参与2023腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档