Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Although originally designed for use with Node.js and installable via npm i async, it can also be used directly in the browser. A ESM/MJS version is included in the main async package that should automatically be used with compatible bundlers such as Webpack and Rollup.
A pure ESM version of Async is available as async-es.
// for use with Node-style callbacks...
varasync=require("async");varobj={dev:"/dev.json",test:"/test.json",prod:"/prod.json"};varconfigs={};async.forEachOf(obj,(value,key,callback)=>{fs.readFile(__dirname+value,"utf8",(err,data)=>{if(err)returncallback(err);try{configs[key]=JSON.parse(data);}catch(e){returncallback(e);}callback();});},err=>{if(err)console.error(err.message);// configs is now a map of JSON data
doSomethingWith(configs);});
varasync=require("async");// ...or ES2017 async functions
async.mapLimit(urls,5,asyncfunction(url){constresponse=awaitfetch(url)returnresponse.body},(err,results)=>{if(err)throwerr// results is now an array of the response bodies
console.log(results)})