當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js proces 'rejectionHandled'事件用法及代碼示例


事件:'rejectionHandled'

添加於:v1.4.1

參數

每當 Promise 被拒絕並且在 Node.js 事件循環的一圈之後附加了錯誤處理程序(例如使用 promise.catch() )時,就會發出 'rejectionHandled' 事件。

Promise 對象之前會在 'unhandledRejection' 事件中發出,但在處理過程中獲得了拒絕處理程序。

對於始終可以處理拒絕的Promise 鏈,沒有頂層的概念。由於本質上是異步的,Promise 拒絕可以在未來的時間點處理,可能比發出 'unhandledRejection' 事件所需的事件循環輪次晚得多。

另一種表述方式是,與同步代碼中存在未處理異常的ever-growing 列表不同,Promises 可以有未處理拒絕的growing-and-shrinking 列表。

在同步代碼中,當未處理的異常列表增加時,會發出 'uncaughtException' 事件。

在異步代碼中,當未處理的拒絕列表增加時會發出 'unhandledRejection' 事件,而當未處理的拒絕列表縮小時會發出 'rejectionHandled' 事件。

import process from 'node:process';

const unhandledRejections = new Map();
process.on('unhandledRejection', (reason, promise) => {
  unhandledRejections.set(promise, reason);
});
process.on('rejectionHandled', (promise) => {
  unhandledRejections.delete(promise);
});const process = require('node:process');

const unhandledRejections = new Map();
process.on('unhandledRejection', (reason, promise) => {
  unhandledRejections.set(promise, reason);
});
process.on('rejectionHandled', (promise) => {
  unhandledRejections.delete(promise);
});

在此示例中,unhandledRejections Map 將隨著時間的推移而增長和縮小,反映開始未處理然後處理的拒絕。可以定期在錯誤日誌中記錄此類錯誤(這可能是long-running 應用程序的最佳選擇)或在進程退出時(這可能對腳本最方便)。

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品  'rejectionHandled'事件。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。