Nobody Picked Me

    make-promises-safe

    5.1.0 • Public • Published

    make-promises-safe   Build Status

    A node.js module to make the use of promises safe. It implements the deprecation DEP0018 of Node.js in versions 6+. Using Promises without this module might cause file descriptor and memory leaks.

    It is important that this module is only used in top-level program code, not in reusable modules!

    The Problem

    Node.js crashes if there is an uncaught exception, while it does not crash if there is an 'unhandledRejection', i.e. a Promise without a .catch() handler.

    If you are using promises, you should attach a .catch() handler synchronously.

    As an example, the following server will leak a file descriptor because of a missing .catch()  handler:

    const http = require('http')
    const server = http.createServer(handle)
     
    server.listen(3000)
     
    function handle (req, res) {
      doStuff()
        .then((body) => {
          res.end(body)
        })
    }
     
    function doStuff () {
      if (Math.random() < 0.5) {
        return Promise.reject(new Error('kaboom'))
      }
     
      return Promise.resolve('hello world')
    }

    The Solution

    make-promises-safe installs an process.on('unhandledRejection') handler that prints the stacktrace and exits the process with an exit code of 1, just like any uncaught exception.

    Install

    npm install make-promises-safe --save
    

    Usage

    'use strict'
     
    require('make-promises-safe') // installs an 'unhandledRejection' handler
    const http = require('http')
    const server = http.createServer(handle)
     
    server.listen(3000)
     
    function handle (req, res) {
      doStuff()
        .then((body) => {
          res.end(body)
        })
    }
     
    function doStuff () {
      if (Math.random() < 0.5) {
        return Promise.reject(new Error('kaboom'))
      }
     
      return Promise.resolve('hello world')
    }

    as a preloader

    You can add this behavior to any Node.js application by using it as a preloader:

    node -r make-promises-safe server.js
    

    with core dumps

    You can also create a core dump when an unhandled rejection occurs:

    require('make-promises-safe').abort = true
    

    With custom logging

    You can add a custom logger to log errors in your own format. To do this override the logError property with a function that takes a single Error parameter. This defaults to console.error.

    const makePromisesSafe = require('make-promises-safe');
    makePromisesSafe.logError = function(err) {
      // log the err object
    }
    

    License

    MIT

    Install

    npm i make-promises-safe

    DownloadsWeekly Downloads

    116,030

    Version

    5.1.0

    License

    MIT

    Unpacked Size

    6.31 kB

    Total Files

    7

    Last publish

    Collaborators

    • matteo.collina