diff options
Diffstat (limited to 'runtime/js')
-rw-r--r-- | runtime/js/99_main.js | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index 4644d2d08..6c5ca3b59 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -344,6 +344,8 @@ function runtimeStart( } core.setUnhandledPromiseRejectionHandler(processUnhandledPromiseRejection); +core.setHandledPromiseRejectionHandler(processRejectionHandled); + // Notification that the core received an unhandled promise rejection that is about to // terminate the runtime. If we can handle it, attempt to do so. function processUnhandledPromiseRejection(promise, reason) { @@ -377,6 +379,20 @@ function processUnhandledPromiseRejection(promise, reason) { return false; } +function processRejectionHandled(promise, reason) { + const rejectionHandledEvent = new event.PromiseRejectionEvent( + "rejectionhandled", + { promise, reason }, + ); + + // Note that the handler may throw, causing a recursive "error" event + globalThis_.dispatchEvent(rejectionHandledEvent); + + if (typeof internals.nodeProcessRejectionHandledCallback !== "undefined") { + internals.nodeProcessRejectionHandledCallback(rejectionHandledEvent); + } +} + let hasBootstrapped = false; // Delete the `console` object that V8 automaticaly adds onto the global wrapper // object on context creation. We don't want this console object to shadow the |