maybe-promise-factory
The maybePromiseFactory normalizes synchronous values and asynchronous values by always returning a Promise.
- The factory uses the ES6 Promise implementation by default but can use other Promise implementations.
- The returned maybePromise function accepts an argument and converts it to a promise if it is another type of value.
- If it is passed a function, it invokes it and applies the same rules to the result of the function to promisify it.
- If the invoked function throws an exception, it is caught and a rejected Promise is returned.
Installation
Install with npm install maybe-promise-factory
.
Usage Examples
const maybePromise = require('maybe-promise-factory')();
maybePromise(42).then(res => console.log(res));
maybePromise(new Promise(resolve => resolve(42))).then(res => console.log(res));
maybePromise(syncSum.bind(null, 1, 2)).then(res => console.log(res));
maybePromise(syncSum.bind(null, 1, 'x').catch(err => console.error(err));
function syncSum (a, b) {
if (typeof a === 'number' && typeof b === 'number') {
return a + b;
} else {
throw new TypeError('Invaild arguments passed to syncSum');
}
}
maybePromise(asyncSum.bind(null, 1, 2)).then(res => console.log(res));
maybePromise(asyncSum.bind(null, 1, 'x').catch(err => console.error(err));
function asyncSum (a, b) {
return new Promise((resolve, reject) => {
if (typeof a === 'number' && typeof b === 'number') {
resolve(a + b);
} else {
reject(new TypeError('Invalid arguments passed to asyncSum'));
}
});
}
const Bluebird = require('bluebird');
const maybePromise = require('maybe-promise-factory')(Bluebird);
Testing
Tests are written with Mocha and Should. They can be run with npm test
.