Browse Source

promise: hard deprecation for unhandled promise rejection

PR-URL: https://github.com/nodejs/node/pull/8217
Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
v7.x
James M Snell 8 years ago
parent
commit
07dbf7313d
  1. 9
      lib/internal/process/promises.js
  2. 5
      test/parallel/test-promises-warning-on-unhandled-rejection.js

9
lib/internal/process/promises.js

@ -45,6 +45,7 @@ function setupPromises(scheduleMicrotasks) {
}
}
var deprecationWarned = false;
function emitPendingUnhandledRejections() {
let hadListeners = false;
while (pendingUnhandledRejections.length > 0) {
@ -59,6 +60,14 @@ function setupPromises(scheduleMicrotasks) {
warning.name = 'UnhandledPromiseRejectionWarning';
warning.id = uid;
process.emitWarning(warning);
if (!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');
}
} else {
hadListeners = true;
}

5
test/parallel/test-promises-warning-on-unhandled-rejection.js

@ -16,11 +16,14 @@ process.on('warning', common.mustCall((warning) => {
assert(/Unhandled promise rejection/.test(warning.message));
break;
case 1:
assert.strictEqual(warning.name, 'DeprecationWarning');
break;
case 2:
assert.strictEqual(warning.name, 'PromiseRejectionHandledWarning');
assert(/Promise rejection was handled asynchronously/
.test(warning.message));
}
}, 2));
}, 3));
const p = Promise.reject('This was rejected');
setImmediate(common.mustCall(() => p.catch(() => {})));

Loading…
Cancel
Save