“返回等待承诺”和“返回承诺”之间的区别

2023-12-19

鉴于下面的代码示例,行为是否有任何差异?如果有,这些差异是什么?

return await promise

async function delay1Second() {
  return (await delay(1000));
}

return promise

async function delay1Second() {
  return delay(1000);
}

据我了解,第一个将在异步函数内进行错误处理,并且错误将从异步函数的 Promise 中冒出。然而,第二个需要少一个刻度。它是否正确?

这段代码只是一个返回 Promise 的常用函数,供参考。

function delay(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

大多数时候,两者之间没有明显的差异return and return await。两个版本delay1Second具有完全相同的可观察行为(但取决于实现,return await版本可能会使用稍多的内存,因为中间Promise可能会创建对象)。

然而,正如 @PitaJ 指出的,在一种情况下存在差异:如果return or return await嵌套在一个try-catch堵塞。考虑这个例子

async function rejectionWithReturnAwait () {
  try {
    return await Promise.reject(new Error())
  } catch (e) {
    return 'Saved!'
  }
}

async function rejectionWithReturn () {
  try {
    return Promise.reject(new Error())
  } catch (e) {
    return 'Saved!'
  }
}

在第一个版本中,async 函数在返回其结果之前等待被拒绝的 Promise,这会导致拒绝变成异常,并且catch待达成的条款;因此,该函数将返回一个解析为字符串“Saved!”的承诺。

然而,该函数的第二个版本确实直接返回被拒绝的承诺无需在异步函数中等待它,这意味着catch情况是not拨打电话,但呼叫者却​​遭到拒绝。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“返回等待承诺”和“返回承诺”之间的区别 的相关文章

随机推荐

  • 将 Scala 文件加载到解释器中以使用函数?

    我在文件中而不是在类中定义了一些 Scala 函数 并且我想在 Scala 解释器中使用它们 我知道我可以说scala filename scala只需运行该文件并退出解释器 但我想运行该文件 然后留在解释器中 以便我可以进行一些测试 谁能
  • 使用 markdown 创建 元素 (kramdown)

    是否可以使用 markdown 创建一个 span 元素 我正在使用 Kramdown 转换器 Thanks 根据Markdown 语法规范 文档 http daringfireball net projects markdown synt
  • 将 scala.math.BigDecimal 转换为 java.math.BigDecimal?

    我如何转换scala math BigDecimal to java math BigDecimal 无需与字符串进行双重转换 val sb scala math BigDecimal 12345 val jb sb bigDecimal
  • 在数据表的分页控件中显示不带省略号的页面

    我正在使用 jQuery Datatables JS 和 Bootstrap 我遇到了一个问题 有一个解决方法 但它不是最好的 问题 我的表包含超过 4k 条记录 如果处理表的人需要从记录 200 到 300 进行处理 并且为了方便起见 他
  • PHP - 从数据库构建多级关联数组(从数据库按州对城市进行排序)

    我对 php 有点陌生 在过去的几个小时里我一直在绞尽脑汁试图弄清楚这一点 我需要从数据库中按州对城市进行排序 我使用以下查询来检索数据集 SELECT state city FROM table ORDER BY state ASC ci
  • 如何克隆道具对象并使其不反应[重复]

    这个问题在这里已经有答案了 我有一些表单数据 我通过道具与子组件共享 现在我想克隆 prop 对象并使其不响应 就我而言 我希望用户能够修改 props 值 而无需实际更改克隆值 克隆值应该仅用于向用户显示编辑时的表单内容 下面的代码显示了
  • Swift:.classForCoder() 的替代方案

    给出以下代码 return TyphoonDefinition withClass AppDelegate classForCoder definition in definition injectProperty assembly 有必要
  • 内核sys_call_table地址与system.map中指定的地址不匹配

    我正在尝试温习 C 所以我一直在研究 Linux 内核的系统调用表 在 3 13 0 32 generic 上 我在网上找到了一个资源 它使用以下函数搜索系统调用表 并将其加载到 LKM 中的内核中 static uint64 t aqui
  • 如何在 Linq 中进行完全外连接?

    我继承了一个设计不完全优化的数据库 并且我需要操作一些数据 让我对我必须做的事情给出一个更常见的类比 假设我们有一个Student桌子 一个StudentClass记录他参加的所有课程的表格 以及StudentTeacher表存储了所有教过
  • 将 Spring Boot WAR 部署到 Tomcat 8 - 访问资源时出现 HTTP 404

    我是 Spring Boot 的新手 正在努力将一个简单的 HTML Web 应用程序 AngularJS 部署到 Tomcat 8 这个 Web 应用程序仅提供一些 HTML CSS JS 内容 没有对后端的 REST 调用 它是使用 W
  • 是否有 VS Code 和 VS Code 扩展的活动监视器?

    有一天 我在拔掉电源的情况下使用我的笔记本电脑 3 小时内它就从充满电到了 10 通常电池可以持续一整天 长话短说 VS Code 正在耗尽我的电池寿命 VS Code 的能源使用量似乎比排名第二的能源用户 Chrome 高出近 30 倍
  • 修改Devise重置密码错误文本

    使用 Devise GEM 当用户密码重置时 他们可以设置新密码 如果输入的密码不匹配或密码太短 您会收到默认消息 密码与确认不匹配 密码太短 最少8个字符 如何 在哪里可以更改这些错误消息的文本 将其添加到您的 config locals
  • iOS 7隐藏标签栏问题

    IOS7 中隐藏选项卡显示非正式行为 当我使用 self tabBarController tabBar hidden YES 上面的代码隐藏了 tabBar 但我的底部视图不保持交互式 但是当我在导航中推送 viewController
  • Mac Mini 足以用作 iPhone 开发机吗?

    所以过去我接触过的两个客户 所有的讨论都是关于创建一个 iPhone 应用程序 我不会撒谎 我想制作一个 或者至少学习如何制作它们 我从未拥有过 Mac 所以我不知道他们的操作系统如何工作 工作 执行 无论如何 我是一名 NET 开发人员
  • 如何读取 AngularJS 中 ArrayBuffer 中的二进制数据?

    在 AngularJS 中有 http get http docs angularjs org api ng 24http get动态获取数据 不幸的是 从官方文档中很难理解如何读取二进制数据 例如 用于图像操作 默认get获取数据作为St
  • 如何正确转义正则表达式中的字符

    我想在字符串内进行字符串搜索 简单地说MySTR search Needle 出现此问题时needle字符串包含特殊的正则表达式字符 如 等 它因错误而失败invalid quantifier 我浏览过网页 发现可以使用以下命令转义字符串
  • 响应式六边形网格

    我从互联网上加载了我的网站上的多个图像 是否有可能给所有这些图像一个六边形在响应式网格中 div img src link class Image div div img src link class Image div 我找到了多种方法来
  • 如何从 adb shell 检查 SharedPreferences?

    现在我们可以从远程 Shell 检查 sqlite3 数据库 http developer android com guide developing tools adb html sqlite 是否可以从 adb shell 检查 Shar
  • 通过ObjectID获取MongoDB集合

    MongoDB ID 对于单个数据库集群是唯一的 是否可以获取使用特定 ObjectID 的集合 我有一个 ObjectID 的十六进制表示形式 并且需要知道具有此 ID 的文档所在的集合 可能吗 它不是本机功能 但可以通过迭代所有集合来实
  • “返回等待承诺”和“返回承诺”之间的区别

    鉴于下面的代码示例 行为是否有任何差异 如果有 这些差异是什么 return await promise async function delay1Second return await delay 1000 return promise