This repository was archived by the owner on Mar 31, 2018. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 6
This repository was archived by the owner on Mar 31, 2018. It is now read-only.
Post mortem alternatives #8
Copy link
Copy link
Open
Description
One of the suggested solutions to get proper post mortem core dumps is to only run promise handlers from the microtask queue in a try/catch block if a catch handler has already been added to the promise synchronously, when --abort-on-unhandled-rejection is passed as an argument.
Problems:
- Breaks the promise constructor as well as existing promise code. With this implemented, existing libraries are just as likely to generate core dumps as the problem code we're trying to trace down. To prevent this, node would have to add logging of warnings for unhandled rejections when catch handlers are added asynchronously - a huge shift in the current promise ecosystem.
- Wont work with generator-based solutions and generator-based
async/awaittranspilers. The generator runners have to attach a catch handler to the promise to forward that to the generator, and they have no way of querying generators whether the current frame is within a try-catch block - Promises are designed to be used with
try/catch. As such there will be little point in giving promises to users while forbidding them to use try/catch, especially withasync/awaitor generators. Only if filtered catch is added to the language, then this change will start making sense.- proposed avoidance method: passing an object as a second argument is not ergonomic and against core promise point (error propagation)
- alternate method:
promise[methodNameToBeDetermined](predicate, handlerReturningPromise)would work better, but still misses the point of using async/await.
This issue is opened to discuss alternatives that may satisfy post mortem debugging needs.