Promise-utils is a dependency-free JavaScript/TypeScript library that provides Lodash-like utility functions for dealing with native ES6 promises.
Installation
$ npm install blend-promise-utils
Usage Example
const promiseUtils = require('blend-promise-utils') const { promises: fs } = require('fs') const request = require('request-promise-native'); const isEmpty = require('lodash.isempty'); const MS_IN_SECOND = 1000; async function main() { const cachedResponse = promiseUtils.memoize( async (contents) => request(contents.url), contents => contents.url, 15 * MS_IN_SECOND // contents could change ); const fileContents = await promiseUtils.map( ['file1', 'file2', 'file3'], async fileName => { const rawData = await fs.readFile(fileName); return JSON.parse(rawData); }, ); while (true) { await promiseUtils.delay(150); // avoid slamming CPU await promiseUtils.mapSeries( fileContents, async contents => { const remoteData = await cachedResponse(contents); const { results, errors } = await promiseUtils.settleAll([ asyncFunction1(), asyncFunction2(), asyncFunction3(), ]); if (!isEmpty(errors)) { throw new Error(`Unable to settle all functions: ${JSON.stringify(errors)}`); } else { return results; } } ) } await promiseUtils.retry(flakyFunction, { maxAttempts: 3, delayMs: 150 })(flakyFunctionArgument); await promiseUtils.timeout(longFunction, 60 * MS_IN_SECOND)(longFunctionArgument); } main()
API
Test
$ npm test
Documentation
Build docs
$ make docs
Push docs to Github
$ make push-docs