如何处理错误并正确使用 Promise

2024-04-11

首先,我正在对我发布的这个问题进行跟进不久前 https://stackoverflow.com/questions/53940043/unhandledpromiserejectionwarning-this-error-originated-either-by-throwing-insid/53940086?noredirect=1#comment94720078_53940086

现在,我以为我了解 Async 和 Promise,但显然我错过了一些东西。

参考由 estus 标记的答案 https://stackoverflow.com/questions/51535455/express-js-use-async-function-on-requests/51538169#51538169,

除非 API 支持 Promise,否则错误应该完全在 异步函数。函数体应该用 try..catch 包裹起来 排除未处理的拒绝,这可能会导致将来出现异常 节点版本

从中我能够理解每当我们使用异步函数我们想做错误处理我们需要使用try..catch对于正常的 Promise 我们可以简单地做解决/拒绝或者如果它已经是一个承诺那么我们可以链接并执行.then and .catch但为此我得到了以下评论回复

是的,您可能会遇到错误。 async/await 只是语法糖 原始的承诺。任何异步函数都可以用普通 ES6 重写

我可能会广泛讨论这个问题,但有人可以帮我解释一下吗?

我们什么时候需要使用

.then and .catch

我们什么时候需要使用

try..catch

另外,这是什么意思

除非 API 支持 Promise


异步等待代码看起来更干净且易于阅读。创建 Promise 是为了解决回调地狱问题,但链接大量 Promise 也令人困惑。因此,异步等待是一种语法糖,您可以使用 .then 或异步等待中的任何一个。

如果您使用简单的 Promise 语法,那么您可以使用 .then.then.then.catch() 语法。

如果你使用async和await那么你必须使用try catch。所有的等待都将进入尝试,而捕获条件将进入单个捕获。

当您使用的 API/函数返回 Promise 时,可以使用这两种方法。

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

如何处理错误并正确使用 Promise 的相关文章

  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • 如何使用 Greasemonkey 监视静态 HTML 页面的更改?使用哈希?

    我希望我的 Greasemonkey 脚本仅在其访问的静态页面具有与以前完全相同的内容时运行 现在我可以设置一个包含该页面哈希的变量 我正在寻找一种动态散列页面的方法 以便我可以将我的散列与生成的散列进行比较 关于如何即时实现散列的任何想法
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • JavaScript eval("{}") 返回行为?

    根据ECMA 262 规范 http www ecma international org publications files ECMA ST Ecma 262 pdf 以下语句返回1 eval 1 eval 1 eval 1 var a
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7

随机推荐

  • Visual Studio Android ApkSigner 在密钥库中找不到密钥

    我在 Visual Studio 中创建 APK 时收到此错误 Failed to load signer signer 1 C googleplay keystore entry googleplay does not contain a
  • 使用pipenv,如何在pipfile中指定最低的python版本?

    Pipenv 有没有办法在 Pipfile 中指定 python 的最低版本 像这样的东西会起作用吗 requires python version gt python 3 5 No pipenv does not支持这一点 每Pipenv
  • xcode 接口生成器对象链接到检查器中的自定义类?

    在Xcode 最新版本 Interfacebuilder中 您可以将对象链接到代码 我创建了一个类 interface FileChangeController NSObject 但它没有在 Interface Builder Inspec
  • ios8 - 如何显示默认共享表

    我想展示并使用默认的 分享到其他服务 表 以便允许分享到 Twitter Facebook 电子邮件等 我不知道如何从我的应用程序中显示此视图 我该怎么做 您可以使用简单的活动控制器来显示默认共享应用程序 NSArray activityI
  • 使用 py2neo 在 neo4j 上查询写入性能

    目前 我正在努力寻找一种高性能的方法 使用 py2neo 运行多个查询 我的问题是 python 中有一大堆需要写入 neo4j 的写入查询 我现在尝试了多种方法来解决这个问题 对我来说最好的工作方法如下 from py2neo impor
  • 在 ninja/cmake 中操纵独立目标的构建顺序

    我正在开发一个使用 cmake ninja 构建的 C 项目 在 64 线程计算机上有大约 1200 个构建目标 有一个翻译单元需要 10 分钟来编译 大多数其他单元都相对较快 因此所有其他目标的构建一起只需要大约 9 分钟 在所有线程上构
  • 通过对具有匹配 id 编号的对象进行分组来重建 NSArray?

    我有一个 NSArray 数组中的每个对象都有一个 groupId 和一个名称 每个对象都是唯一的 但有许多对象具有相同的 groupId 有没有办法可以将数组分开并重建它 以便将名称分组到具有相应 groubId 的单个对象中 这是数组当
  • 获取密封特征的子类

    是否有可能 通过宏 某种形式的无形状自动魔法或其他形式 获得密封特征的子类列表 在编译时 在运行时 您不需要任何第三方库来执行此操作 sealed trait MyTrait case object SubClass1 extends My
  • 使用 C# 搜索 CSV 文件并提取旁边列中的值

    我正在尝试编写一个我正在编写的程序 Visual Studio 中的 C 在外部 CSV 文件中查找值 并将下一列中的值拉回到我的 WinForm 中的标签中 我的 CSV 文件是使用虚拟数据进行的测试 如下 gt old newuser
  • 如何获取 pexpect 日志文件中的时间戳

    我在用pexpect处理我的 telnet 和 ssh 通信 我还将所有请求 响应写入logfile using pexpect logfile filename 我想拥有时间戳也在日志文件中 我在文档中找不到它 有谁知道如何实现此功能 l
  • 这就是 C 中 + 运算符的实现方式吗?

    当理解原始运算符如 and 是用C实现的 我发现了以下片段一个有趣的答案 https stackoverflow com a 11694778 5399734 replaces the operator int add int x int
  • 从抓取的网页获取页面标题[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions var h
  • 在各种浏览器中用javascript读取客户端的文件内容

    我试图提供一个仅脚本的解决方案 用于通过浏览器读取客户端计算机上的文件内容 我有一个适用于 Firefox 和 Internet Explorer 的解决方案 这并不漂亮 但我现在只是在尝试 function getFileContents
  • 当 Window AllowsTransparency = true 时,WPF 是否硬件加速?

    我一直在考虑在 WPF 中制作自己的窗口框架 类似于 Visual Studio 我已阅读该设置AllowsTransparency true将强制 WPF 以软件模式呈现 这个例子 https wpfwindow codeplex com
  • LINQ 中的多个左联接

    我正在尝试将 SQL 查询转换为 LINQ 但无法正确获取语法 我原来的 工作的 SQL 查询是 SELECT a PersonnelNumber a LastName a FirstName a MiddleInitial b Title
  • Apollo Android 客户端 - 无法访问类路径上生成的类

    我已经成功生成了 Apollo 类 并且可以在构建目录中看到它们 但是它们在类路径上不可用 奇怪的是 生成的枚举可用 但类本身不可用 运行 Apollo 的 Github 上提供的示例项目确实有效 但我看不到配置之间的差异 下面是麦克维 h
  • 在 PostgreSQL 中创建具有加密密码的用户

    是否可以在 PostgreSQL 中创建用户而不提供纯文本密码 理想情况下 我希望能够创建一个仅提供使用 sha 256 加密的密码的用户 我想做的是创建一个具有类似内容的用户 CREATE USER martin WITH PASSWOR
  • Android Material Design 示例代码给出缺少资源错误

    我正在尝试运行从下面相同的 Android 材料设计https github com material components material components android https github com material com
  • 我可以在 Rust 中将字符串转换为枚举而不使用宏吗?

    例如 如果我有如下代码 enum Foo Bar Baz Bat Quux impl Foo from input str gt Foo Foo input 这显然会失败 因为input不是 Foo 的方法 我可以手动输入 from inp
  • 如何处理错误并正确使用 Promise

    首先 我正在对我发布的这个问题进行跟进不久前 https stackoverflow com questions 53940043 unhandledpromiserejectionwarning this error originated