var hasBeenNotified = hasBeenNotifiedProperty.get(promise);
if (hasBeenNotified !== undefined) {
hasBeenNotifiedProperty.delete(promise);
- if (hasBeenNotified === true)
- process.emit('rejectionHandled', promise);
+ if (hasBeenNotified === true) {
+ process.nextTick(function() {
+ process.emit('rejectionHandled', promise);
+ });
+ }
+
}
}
if (event === promiseRejectEvent.unhandled)
unhandledRejection(promise, reason);
else if (event === promiseRejectEvent.handled)
- process.nextTick(function() {
- rejectionHandled(promise);
- });
+ rejectionHandled(promise);
else
NativeModule.require('assert').fail('unexpected PromiseRejectEvent');
});
});
});
+asyncTest('While inside setImmediate, catching a rejected promise derived ' +
+ 'from returning a rejected promise in a fulfillment handler ' +
+ 'prevents unhandledRejection', function(done) {
+ onUnhandledFail(done);
+
+ setImmediate(function() {
+ // reproduces on first tick and inside of setImmediate
+ Promise
+ .resolve('resolve')
+ .then(function() {
+ return Promise.reject('reject');
+ }).catch(function(e) {});
+ });
+});
+
// State adapation tests
asyncTest('catching a promise which is asynchronously rejected (via' +
'resolution to an asynchronously-rejected promise) prevents' +