Node.js Process unhandledRejection 事件

2025年2月21日 | 阅读 4 分钟

在本文中,我们将讨论 Node.js Process unhandledRejection 事件,包括其语法、参数和示例。

什么是 Node.js Process unhandledRejection 事件?

process 是 Node.js 中的一个全局对象,可以通过运行命令 process.info.js 来访问其信息。该命令会保存记录并包含有关当时在计算机上运行的特定 Node.js 进程的所有信息。当 Promise 被拒绝但未被处理时,会发出 unhandled rejection 事件。

Node.js 会向终端发送 UnhandledPromiseRejection 警告,并立即退出进程。全局 Node.js 进程会触发未处理/未处理的 rejection 事件。该事件在发生未处理的 rejection 并且 Promise 链中没有此类处理程序时触发。

当 Promise 被拒绝且没有关联的 rejection 处理程序时,Node.js 中会调用 unhandledRejection 事件。这意味着 Promise 未被处理,这可能会导致应用程序出现奇怪的结果,甚至可能出现错误。

它是如何工作的?

  • Promise Rejection: 如果 Promise 被拒绝,则表示如果 Promise 正在执行其他操作,则存在问题。这可能是由于错误、拒绝或任何其他导致 Promise 未被 fulfill 的条件。
  • Rejection Handling: 在理想情况下,当 Promise 被拒绝时,应该有一个 catch 块或 rejection 处理程序来处理该 Promise。这将帮助我们能够处理拒绝,然后继续解释该怎么做,例如记录错误、重试操作或礼貌地处理失败。
  • Unhandled Rejection: 另一种情况是,当 Promise 没有 catch 块或 rejection 处理程序时,这使得 Promise 未被处理。当未包含 catch 块或 catch 块本身抛出错误时,可能会发生这种情况。
  • UnhandledRejection Event: 每当发生未处理的 rejection 时,Node. js 就会触发 unhandled rejection 事件。此事件可以提供有关 Promise rejection 的信息,以及该 rejection 的值或 Promise 本身。

语法

它具有以下语法:

参数

此方法具有以下两个参数。

  • UnhandledRejection: 在此过程中,它是一个触发事件,具有名称。
  • Callback function: 这是一个在触发事件发生时执行的方法。

返回值

此方法的返回类型为空

示例 1

输出

 
unhandledRejection It was an Invalid password   

说明

  • 此 Node.js 代码片段用于设置全局的未处理 Promise rejection 的处理器,该处理器源自 process。
  • 第一个实践是按照 Node.js 应用程序中的方式编写的。on('unhandledRejection', error => { console.error('unhandledRejection', error); }); 监听器会在 Promise 被拒绝但未被捕获时将错误打印到控制台。
  • 在本例中,我们拒绝了消息:'It Was an Invalid password'。由于此 rejection 未被 a.catch() 方法或任何等效方式处理,因此该错误会生成 unhandledRejection 事件。
  • 之后,监听器会将消息 'unhandledRejection' 以及 rejection 的原因写入控制台。因此,当运行此脚本时,控制台将打印 unhandledRejection. It Was an Invalid password,这表明未处理的 rejection 已被捕获并记录。

示例 2

输出

 
The password is Invalid   

说明

  • 在给定的 Node.js 程序中,添加了 unhandledRejection 事件监听器以记录程序执行期间发生的任何未处理的 Promise rejection。但在给定的示例中,此监听器将不会被调用,因为被拒绝的 Promise 后面立即跟着一个 .catch() 块来处理 rejection。当 Promise 以消息 "The password is Invalid". 被拒绝时。
  • catch() 方法通过在控制台记录错误消息来处理此 rejection,因此它不是未处理的 rejection。因此,unhandledRejection 监听器不执行任何功能,因为没有未处理的 Promise rejection 会激活它。它表明了如何妥善处理 Node.js 中的 Promise,以便应用程序中不再出现未处理的 rejection。

结论

总之,Node.js 中的 unhandledRejection 事件在处理和记录未 fulfilled 的 Promise rejection 以防止应用程序出现意外情况和奇怪的行为或结果方面至关重要。为此,必须使用 .catch() 块或类似功能专门管理所有 Promise。程序员可以防止 rejection 未被处理,并在 Node. js 应用程序中实现更全面的错误管理。