Promise-utils is a dependency-free JavaScript/TypeScript library thatprovides Lodash-like utility functions for dealing with native ES6promises.
constpromiseUtils=require('blend-promise-utils')const{promises:fs}=require('fs')constrequest=require('request-promise-native');constisEmpty=require('lodash.isempty');constMS_IN_SECOND=1000;asyncfunctionmain(){constcachedResponse=promiseUtils.memoize(async(contents)=>request(contents.url),contents=>contents.url,15*MS_IN_SECOND// contents could change);constfileContents=awaitpromiseUtils.map(['file1','file2','file3'],asyncfileName=>{constrawData=awaitfs.readFile(fileName);returnJSON.parse(rawData);},);while(true){awaitpromiseUtils.delay(150);// avoid slamming CPUawaitpromiseUtils.mapSeries(fileContents,asynccontents=>{constremoteData=awaitcachedResponse(contents);const{ results, errors}=awaitpromiseUtils.settleAll([asyncFunction1(),asyncFunction2(),asyncFunction3(),]);if(!isEmpty(errors)){thrownewError(`Unable to settle all functions:${JSON.stringify(errors)}`);}else{returnresults;}})}awaitpromiseUtils.retry(flakyFunction,{maxAttempts:3,delayMs:150})(flakyFunctionArgument);awaitpromiseUtils.timeout(longFunction,60*MS_IN_SECOND)(longFunctionArgument);}main()