-
-
Notifications
You must be signed in to change notification settings - Fork 33.9k
Description
What is the problem this feature will solve?
When an exception is thrown inside a top level callback, it is reported as an uncaught exception. This can only be handled by attaching an 'uncaughtException' handler on the process object.
This is inconvenient because it would require users to write a single handler for all sorts of uncaught exceptions encountered by the entire process.
What is the feature you are proposing to solve the problem?
Instead of throwing exceptions from the top level callbacks, we should emit 'error' events. This should allow users to distribute their error handling code by attaching separate handlers for each object that will emit such the event.
We’re essentially saying that Node.js code that is equivalent to
function topLevelCallback() {
<... internal node.js code ...>
emitter.emit('event', ...)
}should be transformed into
function topLevelCallback() {
try {
<... internal node.js code ...>
} catch (err) {
emitter.emit('error', err);
return;
}
emitter.emit('event', ...)
}(mod being possibly/partially written in C++ rather than JS)
Originally posted by @addaleax in #42054 (comment)
This might only work for EventEmitter objects because only those are capable of emitting 'error' events. However, we should also consider turning other objects that might potentially throw exceptions from top level callbacks into EventEmitter instances but that should be discussed in a separate issue. I would like to keep this issue focused only on top level callbacks inside existing EventEmitters present in the Node.js repo.
What alternatives have you considered?
Current behavior where things are inconsistent.