From 7d7dbfbb123410bba3fa5258f8829d8c3b5e6bcd Mon Sep 17 00:00:00 2001 From: Owen Smith Date: Mon, 25 Jan 2016 09:37:10 -0500 Subject: [PATCH] add handlers for unhandled paths in order to emit destroy --- patches/promise.js | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/patches/promise.js b/patches/promise.js index d13fbb6..a34bac7 100644 --- a/patches/promise.js +++ b/patches/promise.js @@ -15,8 +15,12 @@ module.exports = function patchPromise() { const oldThen = Promise.prototype.then; Promise.prototype.then = wrappedThen; - function makeWrappedHandler(fn, handle, uid) { - if ('function' !== typeof fn) return fn; + function makeWrappedHandler(fn, handle, uid, isOnFulfilled) { + if ('function' !== typeof fn) { + return isOnFulfilled + ? makeUnhandledResolutionHandler(uid) + : makeUnhandledRejectionHandler(uid); + } return function wrappedHandler() { hooks.pre.call(handle); @@ -29,6 +33,20 @@ module.exports = function patchPromise() { }; } + function makeUnhandledResolutionHandler(uid) { + return function unhandledResolutionHandler(val) { + hooks.destroy.call(null, uid); + return val; + }; + } + + function makeUnhandledRejectionHandler(uid) { + return function unhandledRejectedHandler(val) { + hooks.destroy.call(null, uid); + throw val; + }; + } + function wrappedThen(onFulfilled, onRejected) { if (!state.enabled) return oldThen.call(this, onFulfilled, onRejected); @@ -39,8 +57,8 @@ module.exports = function patchPromise() { return oldThen.call( this, - makeWrappedHandler(onFulfilled, handle, uid), - makeWrappedHandler(onRejected, handle, uid) + makeWrappedHandler(onFulfilled, handle, uid, true), + makeWrappedHandler(onRejected, handle, uid, false) ); } };