wrap-promise

1.0.1 • Public • Published

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

npm install wrap-promise

Bower

bower install wrap-promise

Duo

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.

Package Sidebar

Install

npm i wrap-promise

Weekly Downloads

3,618

Version

1.0.1

License

MIT

Last publish

Collaborators

  • shinnn