Skip to content

shinnn/wrap-promise

Repository files navigation

wrap-promise

NPM version Bower version Build Status Build status Coverage Status Dependency Status devDependency Status

Like new Promise(), but prevents implicit rejection

Comparison

Using the native new Promise()

const fs = require('fs');

new Promise((resolve, reject) => {
  // Node's fs.readFile throws a type error when the first argument is not a string.

  fs.readFile(123, (err, buf) => { // doesn't throw, but calls `onRejected` function
    if (err) {
      reject(err);
      return;
    }
    resolve(buf);
  });
}).catch(() => console.log('This function should be called.'));

Using wrap-promise

const fs = require('fs');
const wrapPromise = require('wrap-promise');

wrapPromise((resolve, reject) => {
  fs.readFile(123, (err, buf) => { // doesn't call `onRejected` but throws immediately
    if (err) {
      reject(err);
      return;
    }
    resolve(buf);
  });
}).catch(() => console.log('This function should not be called.'));

According to the Promise specification, a promise will be rejected implicitly when an error is thrown in the constructor callback. The only (and the biggest) difference is that wrap-promise immediately throws an error in such a case.

Installation

Package managers

npm install wrap-promise
bower install wrap-promise
const wrapPromise = require('shinnn/wrap-promise');

Standalone

Download the script file directly.

API

wrapPromise(fn)

fn: Function
Return: Object (Promise)

It can be used in the same way as new Promise() but new operator is not needed.

wrapPromise.Promise

Type: Function
Default: global Promise or require('es6-promise').Promise

The Promise constructor used in wrapPromise function.

On CommonJS-based environment (e.g. Node)

By default it uses the global Promise constructor if available, otherwise it requires es6-promise and use its Promise property.

If you don't need the fallback, use no-fallback.js instead. (Useful for Browserify)

const wrapPromise = require('wrap-promise/no-fallback');

On non-CommonJS environment

It uses the global Promise constructor without any fallbacks. Before using wrapPromise, you must load Promise polyfill if Promise doesn't exist by default.

License

Copyright (c) 2014 - 2015 Shinnosuke Watanabe

Licensed under the MIT License.

About

Like new Promise(), but prevents implicit rejection

Resources

License

Stars

Watchers

Forks

Packages

No packages published