wrap-promise v1.0.1
wrap-promise
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-promiseBower
bower install wrap-promiseDuo
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.