next.js
c5dab314 - Ignore unhandledRejection events for promises that reject after a React render aborts (#83590)

Commit
230 days ago
Ignore unhandledRejection events for promises that reject after a React render aborts (#83590) Currently we only abort React renders that are prerendered so this change in practice only affects prerendering. The intent is to not report unhandledRejections that are downstream of an abort because the signal these errors provide is very limited. If you do have unrelated unhandled rejections they'll usually show up before aborting or in a dynamic page render so even if they are incidentally supressed in the prerender context you should still be able to observe them. Arguably we should go further and never report unhandled rejections because there are still valid patterns where you initiate work prospectively and then abandon it by choosing a fork or by returning early (i.e. notFound()). This change doesn't attempt to cover every possible case. The implementation is a bit intense. We need the ability to stop propagating the event which is not natively supported with Node's EventEmitter interface. Instead we patch the listener methods to delegate the filtering to an inner listener queue. If you add/remove or otherwise manipulate the listener list we always ensure our listener is first and can opt to omit propagating the event. If you want to uninstall the this patch you just need to unregister this listener specifically which can be accessing used `process.listeners('unhandledRejection')[0]` This patch only exists for the node environment because we do not do any prerendering in edge runtimes. In the future if we add aborting to environments like edge runtime we may need an alternative solution to this problem
Author
Parents
Loading