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


Node.js process.emitWarning(warning[, type[, code]][, ctor])用法及代碼示例


process.emitWarning(warning[, type[, code]][, ctor])

添加於:v6.0.0

參數
  • warning <string> | <Error> 要發出的警告。
  • type <string>什麽時候warning是一個String,type是用於類型發出警告。默認: 'Warning'.
  • code <string> 發出的警告實例的唯一標識符。
  • ctor <Function>warningString 時,ctor 是一個可選函數,用於限製生成的堆棧跟蹤。 默認: process.emitWarning

process.emitWarning() 方法可用於發出自定義或應用程序特定的進程警告。可以通過向 'warning' 事件添加處理程序來監聽這些。

import { emitWarning } from 'node:process';

// Emit a warning using a string.
emitWarning('Something happened!');
// Emits: (node: 56338) Warning: Something happened!const { emitWarning } = require('node:process');

// Emit a warning using a string.
emitWarning('Something happened!');
// Emits: (node: 56338) Warning: Something happened!
import { emitWarning } from 'node:process';

// Emit a warning using a string and a type.
emitWarning('Something Happened!', 'CustomWarning');
// Emits: (node:56338) CustomWarning: Something Happened!const { emitWarning } = require('node:process');

// Emit a warning using a string and a type.
emitWarning('Something Happened!', 'CustomWarning');
// Emits: (node:56338) CustomWarning: Something Happened!
import { emitWarning } from 'node:process';

emitWarning('Something happened!', 'CustomWarning', 'WARN001');
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!const { emitWarning } = require('node:process');

process.emitWarning('Something happened!', 'CustomWarning', 'WARN001');
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!

在前麵的每個示例中,Error 對象由 process.emitWarning() 在內部生成並傳遞給 'warning' 處理程序。

import process from 'node:process';

process.on('warning', (warning) => {
  console.warn(warning.name);
  console.warn(warning.message);
  console.warn(warning.code);
  console.warn(warning.stack);
});const process = require('node:process');

process.on('warning', (warning) => {
  console.warn(warning.name);
  console.warn(warning.message);
  console.warn(warning.code);
  console.warn(warning.stack);
});

如果 warning 作為 Error 對象傳遞,它將未經修改地傳遞給 'warning' 事件處理程序(並且可選的 typecodector 參數將被忽略):

import { emitWarning } from 'node:process';

// Emit a warning using an Error object.
const myWarning = new Error('Something happened!');
// Use the Error name property to specify the type name
myWarning.name = 'CustomWarning';
myWarning.code = 'WARN001';

emitWarning(myWarning);
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!const { emitWarning } = require('node:process');

// Emit a warning using an Error object.
const myWarning = new Error('Something happened!');
// Use the Error name property to specify the type name
myWarning.name = 'CustomWarning';
myWarning.code = 'WARN001';

emitWarning(myWarning);
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!

如果 warning 不是字符串或 Error 對象,則會引發 TypeError

雖然進程警告使用Error 對象,但進程警告機製不能替代正常的錯誤處理機製。

如果警告 type'DeprecationWarning' ,則執行以下附加處理:

  • 如果使用 --throw-deprecation 命令行 標誌,則棄用警告將作為異常拋出,而不是作為事件發出。
  • 如果使用--no-deprecation 命令行 標誌,則會抑製棄用警告。
  • 如果使用 --trace-deprecation 命令行 標誌,則會將棄用警告與完整堆棧跟蹤一起打印到 stderr

避免重複警告#

作為最佳實踐,每個進程隻應發出一次警告。為此,請將emitWarning() 放在布爾值後麵。

import { emitWarning } from 'node:process';

function emitMyWarning() {
  if (!emitMyWarning.warned) {
    emitMyWarning.warned = true;
    emitWarning('Only warn once!');
  }
}
emitMyWarning();
// Emits: (node: 56339) Warning: Only warn once!
emitMyWarning();
// Emits nothingconst { emitWarning } = require('node:process');

function emitMyWarning() {
  if (!emitMyWarning.warned) {
    emitMyWarning.warned = true;
    emitWarning('Only warn once!');
  }
}
emitMyWarning();
// Emits: (node: 56339) Warning: Only warn once!
emitMyWarning();
// Emits nothing

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 process.emitWarning(warning[, type[, code]][, ctor])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。