What is loud-rejection?
The loud-rejection npm package is designed to make unhandled promise rejections fail loudly instead of the default silent fail. It helps in debugging by logging the errors to the console.
What are loud-rejection's main functionalities?
Default handler for unhandled rejections
This feature sets up a default handler for unhandled promise rejections, which logs the stack trace to stderr.
const loudRejection = require('loud-rejection');
loudRejection();
new Promise((resolve, reject) => {
reject(new Error('Unhandled rejection'));
});
Custom log function
This feature allows you to provide a custom log function to handle the unhandled rejections in a way that suits your needs.
const loudRejection = require('loud-rejection');
const customLogger = error => console.error('Custom log:', error);
loudRejection(customLogger);
new Promise((resolve, reject) => {
reject(new Error('Unhandled rejection with custom logger'));
});
Other packages similar to loud-rejection
hard-rejection
Similar to loud-rejection, hard-rejection makes unhandled promise rejections fail hard and immediately exit the process with an error code, ensuring that unhandled rejections are not silently ignored.
why-is-node-running
While not directly related to unhandled rejections, why-is-node-running can be used to log out active handles that are keeping Node.js process hanging after an unhandled rejection or any other errors, which can be useful for debugging purposes.
loud-rejection
Make unhandled promise rejections fail loudly instead of the default silent fail
By default, promises fail silently if you don't attach a .catch()
handler to them.
This tool keeps track of unhandled rejections globally. If any remain unhandled at the end of your process, it logs them to STDERR and exits with code 1.
Use this in top-level things like tests, CLI tools, apps, etc, but not in reusable modules.
Not needed in the browser as unhandled rejections are shown in the console.
Install
$ npm install loud-rejection
Usage
const loudRejection = require('loud-rejection');
const promiseFunction = require('promise-fn');
loudRejection();
promiseFunction();
Without this module it's more verbose and you might even miss some that will fail silently:
const promiseFunction = require('promise-fn');
function error(error) {
console.error(error.stack);
process.exit(1);
}
promiseFunction().catch(error);
Register script
Alternatively to the above, you may simply require loud-rejection/register
and the unhandledRejection listener will be automagically installed for you.
This is handy for ES2015 imports:
import 'loud-rejection/register';
API
loudRejection([log])
log
Type: Function
Default: console.error
Custom logging function to print the rejected promise. Receives the error stack.
Related
- hard-rejection - Make unhandled promise rejections fail hard right away instead of the default silent fail
- More…