Promise-utils is a dependency-free JavaScript/TypeScript library that provides Lodash-like utility functions for dealing with native ES6 promises.
$ npm install blend-promise-utils
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()
$ npm test
Build docs
$ make docs
Push docs to Github
$ make push-docs