From b6a70520d259fd97017143f3dec0fe5f662cd63a Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Mon, 17 Jun 2019 10:48:21 +0800 Subject: [PATCH] lib: refactor unhandled rejection deprecation warning emission Emit the deprecation warning in the `kDefaultUnhandledRejections` case to reduce the number of branches on unhandled rejection mode - there is now only one switch case on it. Also rename `emitWarning()` to `emitUnhandledRejectionWarning()` to avoid ambiguity with `process.emitWarning()` PR-URL: https://github.com/nodejs/node/pull/28258 Reviewed-By: Benjamin Gruenbaum Reviewed-By: Franziska Hinkelmann --- lib/internal/process/promises.js | 27 +++++++++---------- .../unhandled_promise_trace_warnings.out | 1 - 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/lib/internal/process/promises.js b/lib/internal/process/promises.js index 031997fc1b3467..9814f9b51a3a3f 100644 --- a/lib/internal/process/promises.js +++ b/lib/internal/process/promises.js @@ -126,7 +126,7 @@ function handledRejection(promise) { } const unhandledRejectionErrName = 'UnhandledPromiseRejectionWarning'; -function emitWarning(uid, reason) { +function emitUnhandledRejectionWarning(uid, reason) { const warning = getError( unhandledRejectionErrName, 'Unhandled promise rejection. This error originated either by ' + @@ -144,20 +144,15 @@ function emitWarning(uid, reason) { } catch {} process.emitWarning(warning); - emitDeprecationWarning(); } let deprecationWarned = false; function emitDeprecationWarning() { - if (unhandledRejectionsMode === kDefaultUnhandledRejections && - !deprecationWarned) { - deprecationWarned = true; - process.emitWarning( - 'Unhandled promise rejections are deprecated. In the future, ' + - 'promise rejections that are not handled will terminate the ' + - 'Node.js process with a non-zero exit code.', - 'DeprecationWarning', 'DEP0018'); - } + process.emitWarning( + 'Unhandled promise rejections are deprecated. In the future, ' + + 'promise rejections that are not handled will terminate the ' + + 'Node.js process with a non-zero exit code.', + 'DeprecationWarning', 'DEP0018'); } // If this method returns true, we've executed user code or triggered @@ -186,7 +181,7 @@ function processPromiseRejections() { case kThrowUnhandledRejections: { fatalException(reason); const handled = process.emit('unhandledRejection', reason, promise); - if (!handled) emitWarning(uid, reason); + if (!handled) emitUnhandledRejectionWarning(uid, reason); break; } case kIgnoreUnhandledRejections: { @@ -195,12 +190,16 @@ function processPromiseRejections() { } case kAlwaysWarnUnhandledRejections: { process.emit('unhandledRejection', reason, promise); - emitWarning(uid, reason); + emitUnhandledRejectionWarning(uid, reason); break; } case kDefaultUnhandledRejections: { const handled = process.emit('unhandledRejection', reason, promise); - if (!handled) emitWarning(uid, reason); + if (!handled) emitUnhandledRejectionWarning(uid, reason); + if (!deprecationWarned) { + emitDeprecationWarning(); + deprecationWarned = true; + } break; } } diff --git a/test/message/unhandled_promise_trace_warnings.out b/test/message/unhandled_promise_trace_warnings.out index c9fff40efb72bd..c22dfbe0fcc8fa 100644 --- a/test/message/unhandled_promise_trace_warnings.out +++ b/test/message/unhandled_promise_trace_warnings.out @@ -21,7 +21,6 @@ at * at * at * - at * (node:*) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 1) at handledRejection (internal/process/promises.js:*) at promiseRejectHandler (internal/process/promises.js:*)