{"_id":"@everymundo/limited-concurrency","_rev":"42-6cadab2478cadeb710736eeba2ed1467","name":"@everymundo/limited-concurrency","dist-tags":{"latest":"0.1.1"},"versions":{"0.0.1":{"name":"@everymundo/limited-concurrency","version":"0.0.1","keywords":[],"author":{"name":"Daniel Santana","email":"github@danielsantana.net"},"license":"ISC","_id":"@everymundo/limited-concurrency@0.0.1","maintainers":[{"name":"estebanpablo89","email":"estebanpablo89@gmail.com"},{"name":"yartiles","email":"yadiel@everymundo.com"},{"name":"jonmorazav","email":"moralesjonathan@email.com"},{"name":"emdavidmoreno","email":"davidmm@everymundo.com"},{"name":"everymundo-admin","email":"anton@everymundo.com"},{"name":"ballester","email":"ballester.inbox@gmail.com"},{"name":"danielsan","email":"npm@danielsantana.net"},{"name":"halain","email":"halain80@gmail.com"},{"name":"avivero93","email":"alexvp@everymundo.com"},{"name":"anahiem","email":"anahi@everymundo.com"},{"name":"neilgoldman","email":"neilgoldman305@gmail.com"},{"name":"herlin","email":"herlin@everymundo.com"},{"name":"davidxl","email":"david@everymundo.com"},{"name":"karinfdez","email":"karinfdez@yahoo.com"},{"name":"ernestocarrasco","email":"ing.ernesto.carrasco@gmail.com"},{"name":"erlin","email":"erlin@everymundo.com"},{"name":"alexandprivate","email":"alexandprivate@gmail.com"},{"name":"front10devs","email":"devs@front10.com"},{"name":"hdelcastillo","email":"hiran.delcastillo@everymundo.com"},{"name":"dcuevacem","email":"david.cueva@everymundo.com"},{"name":"rodneyem","email":"rodney.rdx@gmail.com"},{"name":"raydel","email":"raydel.miranda.gomez@gmail.com"},{"name":"ortega.dc98","email":"ortega.dc98@gmail.com"},{"name":"pedroleon917","email":"pedro.leon@everymundo.com"},{"name":"salvadorgonzalezgomez","email":"salvador@everymundo.com"},{"name":"kaylingw","email":"Kayling@everymundo.com"},{"name":"joeaspiazuem","email":"joe.aspiazu@everymundo.com"},{"name":"lazjramos","email":"lazjramos@gmail.com"},{"name":"mounikaeverymundo","email":"Mounika@everymundo.com"},{"name":"daniuska-em","email":"daniuska@everymundo.com"},{"name":"cstansfld","email":"cstansfld@gmail.com"},{"name":"vladimirpetrov","email":"vladimir@everymundo.com"},{"name":"jsalvadorpp","email":"jose.peroza@everymundo.com"}],"homepage":"https://github.com/EveryMundo/limited-concurrency#readme","bugs":{"url":"https://github.com/EveryMundo/limited-concurrency/issues"},"dist":{"shasum":"2b1f9afb6bdba17050b4b3b19f434f486495d909","tarball":"https://registry.npmjs.org/@everymundo/limited-concurrency/-/limited-concurrency-0.0.1.tgz","fileCount":3,"integrity":"sha512-d07OsR9Nm/5ihZd0UCnE5NulfNBXhvBvxSNFpGSwsnYX4vsdv1LsAuBt+lWEOUHL3CccWXi7gYrSa95u8UkyTw==","signatures":[{"sig":"MEUCIBhlw0u8MMYBk15kKqSaSn04lAKcm+aMcEPDUbsR+PKCAiEA8lhuG9979r87fKcVCDP+3d5BoPMnFJapvbtn+zYmEJU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1923},"main":"index.js","gitHead":"8c06469a7aad436e26c287f333c9dab204fb7947","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"danielsan","email":"npm@danielsantana.net"},"repository":{"url":"git+https://github.com/EveryMundo/limited-concurrency.git","type":"git"},"_npmVersion":"8.1.3","description":"Allows node js logic to define a limit of concurrent/async calls","directories":{},"_nodeVersion":"14.18.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/limited-concurrency_0.0.1_1636821277270_0.3938354400950077","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"@everymundo/limited-concurrency","version":"0.1.0","keywords":[],"author":{"name":"Daniel Santana","email":"github@danielsantana.net"},"license":"ISC","_id":"@everymundo/limited-concurrency@0.1.0","maintainers":[{"name":"estebanpablo89","email":"estebanpablo89@gmail.com"},{"name":"yartiles","email":"yadiel@everymundo.com"},{"name":"jonmorazav","email":"moralesjonathan@email.com"},{"name":"emdavidmoreno","email":"davidmm@everymundo.com"},{"name":"everymundo-admin","email":"anton@everymundo.com"},{"name":"ballester","email":"ballester.inbox@gmail.com"},{"name":"danielsan","email":"npm@danielsantana.net"},{"name":"halain","email":"halain80@gmail.com"},{"name":"avivero93","email":"alexvp@everymundo.com"},{"name":"anahiem","email":"anahi@everymundo.com"},{"name":"neilgoldman","email":"neilgoldman305@gmail.com"},{"name":"herlin","email":"herlin@everymundo.com"},{"name":"davidxl","email":"david@everymundo.com"},{"name":"karinfdez","email":"karinfdez@yahoo.com"},{"name":"ernestocarrasco","email":"ing.ernesto.carrasco@gmail.com"},{"name":"erlin","email":"erlin@everymundo.com"},{"name":"alexandprivate","email":"alexandprivate@gmail.com"},{"name":"front10devs","email":"devs@front10.com"},{"name":"hdelcastillo","email":"hiran.delcastillo@everymundo.com"},{"name":"dcuevacem","email":"david.cueva@everymundo.com"},{"name":"rodneyem","email":"rodney.rdx@gmail.com"},{"name":"raydel","email":"raydel.miranda.gomez@gmail.com"},{"name":"ortega.dc98","email":"ortega.dc98@gmail.com"},{"name":"pedroleon917","email":"pedro.leon@everymundo.com"},{"name":"salvadorgonzalezgomez","email":"salvador@everymundo.com"},{"name":"kaylingw","email":"Kayling@everymundo.com"},{"name":"joeaspiazuem","email":"joe.aspiazu@everymundo.com"},{"name":"lazjramos","email":"lazjramos@gmail.com"},{"name":"mounikaeverymundo","email":"Mounika@everymundo.com"},{"name":"daniuska-em","email":"daniuska@everymundo.com"},{"name":"cstansfld","email":"cstansfld@gmail.com"},{"name":"vladimirpetrov","email":"vladimir@everymundo.com"},{"name":"jsalvadorpp","email":"jose.peroza@everymundo.com"}],"homepage":"https://github.com/EveryMundo/limited-concurrency#readme","bugs":{"url":"https://github.com/EveryMundo/limited-concurrency/issues"},"dist":{"shasum":"8a02e58923011d331b86f5da59f5827a527a7c32","tarball":"https://registry.npmjs.org/@everymundo/limited-concurrency/-/limited-concurrency-0.1.0.tgz","fileCount":4,"integrity":"sha512-NLRJRNqb9HqohT84CjX2uMXEoSc4H6+CfMCVcaRpPAQphVeBF3TuRR7G3r2Mr1StLKSLfp1zGfrT1H7UodQenQ==","signatures":[{"sig":"MEYCIQC205kJ/mOZq1MidrQyM7/JICJvbu9jHZ/6HlDl2j/XbwIhANBTB8l0/UejiwlCF9+BBssmefIIw6UkcmyKRmKYvlZk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3814},"main":"index.js","gitHead":"5a0203673fb4a0daee69c59b473d53aa03a094ec","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"danielsan","email":"npm@danielsantana.net"},"repository":{"url":"git+https://github.com/EveryMundo/limited-concurrency.git","type":"git"},"_npmVersion":"8.1.3","description":"Allows node js logic to define a limit of concurrent/async calls","directories":{},"_nodeVersion":"14.18.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/limited-concurrency_0.1.0_1636919561927_0.781600729051142","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"@everymundo/limited-concurrency","version":"0.1.1","keywords":[],"author":{"name":"Daniel Santana","email":"github@danielsantana.net"},"license":"ISC","_id":"@everymundo/limited-concurrency@0.1.1","maintainers":[{"name":"jsalvadorpp","email":"jose.peroza@everymundo.com"},{"name":"lindolo25","email":"lindolo25@outlook.com"},{"name":"double2-us","email":"avivero@double2.us"},{"name":"ceciliagalarza","email":"cecilia.galarza@everymundo.com"},{"name":"carla-villegas","email":"carla.villegas@everymundo.com"},{"name":"eblez","email":"edito.blez.deroncele@gmail.com"},{"name":"mjremedios1985","email":"mjremediosvnz@gmail.com"},{"name":"mtmorell88","email":"maria.morell@everymundo.com"},{"name":"a11y_automation2","email":"a11y_automation2@a11ysolutions.com"},{"name":"ramses83","email":"ramses.pena@everymundo.com"},{"name":"raydel","email":"raydel.miranda.gomez@gmail.com"},{"name":"alex-orga","email":"alexander.orga@everymundo.com"},{"name":"estebanpablo89","email":"estebanpablo89@gmail.com"},{"name":"yartiles","email":"yadiel@everymundo.com"},{"name":"jonmorazav","email":"moralesjonathan@email.com"},{"name":"everymundo-admin","email":"anton@everymundo.com"},{"name":"ballester","email":"ballester.inbox@gmail.com"},{"name":"danielsan","email":"npm@danielsantana.net"},{"name":"halain","email":"halain80@gmail.com"},{"name":"avivero93","email":"alexvp@everymundo.com"},{"name":"anahiem","email":"anahi@everymundo.com"},{"name":"herlin","email":"herlin@everymundo.com"},{"name":"karinfdez","email":"karinfdez@yahoo.com"},{"name":"erlin","email":"erlin@everymundo.com"},{"name":"front10devs","email":"devs@front10.com"},{"name":"hdelcastillo","email":"hiran.delcastillo@everymundo.com"},{"name":"dcuevacem","email":"david.cueva@everymundo.com"},{"name":"rodneyem","email":"rodney.rdx@gmail.com"},{"name":"ortega.dc98","email":"ortega.dc98@gmail.com"},{"name":"pedroleon917","email":"pedro.leon@everymundo.com"},{"name":"kaylingw","email":"Kayling@everymundo.com"},{"name":"lazjramos","email":"lazjramos@gmail.com"},{"name":"daniuska-em","email":"daniuska@everymundo.com"}],"homepage":"https://github.com/EveryMundo/limited-concurrency#readme","bugs":{"url":"https://github.com/EveryMundo/limited-concurrency/issues"},"dist":{"shasum":"ee50f26fca6753f2acf3762d6965b543889f1c07","tarball":"https://registry.npmjs.org/@everymundo/limited-concurrency/-/limited-concurrency-0.1.1.tgz","fileCount":4,"integrity":"sha512-HsfGFPT7gXq0ePuDlVZUh7kn4/iGM5fnHIODwiPFmsoW9HirKOQDvBUdzJ2RDd8Cy9sILsMdPkKigtTa0TsXDw==","signatures":[{"sig":"MEQCIAhCLNXiExMzP8Fk+r4497wBFbS8gyLKsguwkiZMcLDgAiAbtS854wuBU4FtvOO8fHW00YWSXnFzSEYsXdfhmY3aYQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5945},"main":"index.js","gitHead":"975f791cddcb1002e84d47902e2f136d78ac7124","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"danielsan","email":"npm@danielsantana.net"},"repository":{"url":"git+https://github.com/EveryMundo/limited-concurrency.git","type":"git"},"_npmVersion":"9.6.7","description":"Allows node js logic to define a limit of concurrent/async calls","directories":{},"_nodeVersion":"18.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/limited-concurrency_0.1.1_1692805936285_0.256855852991527","host":"s3://npm-registry-packages"}}},"time":{"created":"2021-11-13T16:34:37.270Z","modified":"2026-09-01T21:49:53.667Z","0.0.1":"2021-11-13T16:34:37.423Z","0.1.0":"2021-11-14T19:52:42.088Z","0.1.1":"2023-08-23T15:52:16.423Z"},"bugs":{"url":"https://github.com/EveryMundo/limited-concurrency/issues"},"author":{"name":"Daniel Santana","email":"github@danielsantana.net"},"license":"ISC","homepage":"https://github.com/EveryMundo/limited-concurrency#readme","keywords":[],"repository":{"url":"git+https://github.com/EveryMundo/limited-concurrency.git","type":"git"},"description":"Allows node js logic to define a limit of concurrent/async calls","maintainers":[{"email":"yadiel@everymundo.com","name":"yartiles"},{"email":"moralesjonathan@email.com","name":"jonmorazav"},{"email":"anton@everymundo.com","name":"everymundo-admin"},{"email":"ballester.inbox@gmail.com","name":"ballester"},{"email":"npm@danielsantana.net","name":"danielsan"},{"email":"halain80@gmail.com","name":"halain"},{"email":"mjremediosvnz@gmail.com","name":"mjremedios1985"},{"email":"herlin@everymundo.com","name":"herlin"},{"email":"erlin@everymundo.com","name":"erlin"},{"email":"devs@front10.com","name":"front10devs"},{"email":"pedro.leon@everymundo.com","name":"pedroleon917"},{"email":"kwong01@pros.com","name":"kaylingw"},{"email":"lazjramos@gmail.com","name":"lazjramos"},{"email":"estebanpablo89@gmail.com","name":"estebanpablo89"},{"email":"alexander.orga@everymundo.com","name":"alex-orga"},{"email":"rpena@pros.com","name":"ramses83"},{"email":"a11y_automation2@a11ysolutions.com","name":"a11y_automation2"},{"email":"maria.morell@everymundo.com","name":"mtmorell88"},{"email":"avivero@pros.com","name":"avivero"},{"email":"lzamora@everymundo.com","name":"lzamora_9827"},{"email":"danieltyd81@gmail.com","name":"danieltyd"},{"email":"gtallesb@gmail.com","name":"gtallesb"},{"email":"gguevara01@pros.com","name":"gguevara01"}],"readme":"# limited-concurrency\nAllows node js logic to define a limit of concurrent/async calls\n\nThis is particularly useful when you are hitting external Web APIs that give you a max number of concurrent/simultaneous calls and you want to request many times more than that limit in an optimized way.\n\n## Instalation\n```sh\nnpm i @everymundo/limited-concurrency\n```\n\n## Usage\n```js\nconst limitedConcurrency = require('@everymundo/limited-concurrency')\nconst httpClient = require('@everymundo/http-client')\nconst MAX_CONCURRENT_CALLS = +process.env.MAX_CONCURRENT_CALLS\n\nasync function queryInParallel(url, departureDates = []) {\n  const queryOnce = async (departureDate) => {\n    const fares = await httpClient.post(url, { departureDate })\n    console.log({ fares })\n\n    return fares\n  }\n\n  const allFares = await limitedConcurrency.processArray(queryOnce, departureDates, MAX_CONCURRENT_CALLS)\n}\n```\n\nOr a shorter version\n```js\nasync function queryInParallel(url, departureDates = []) {\n  const queryOnce = (departureDate) => httpClient.post(url, { departureDate })\n\n  const allFares = await limitedConcurrency.processArray(queryOnce, departureDates, MAX_CONCURRENT_CALLS)\n}\n```\n\n## Common Alternative\nA common alternative is to break your array in chunks as you can see below\n```js\nconst httpClient = require('@everymundo/http-client')\nconst MAX_CONCURRENT_CALLS = +process.env.MAX_CONCURRENT_CALLS\n\nasync function alternativeParallel(url, departureDates = []) {\n  let chunk\n  const results = []\n\n  while (chunk = departureDates.splice(0, MAX_CONCURRENT_CALLS) && chunk.length > 0) {\n    const promises = chunk.map(async (departureDate) => {\n      const fares = await httpClient.post(url, { departureDate })\n      console.log({ fares })\n\n      return fares\n    })\n    \n    results.push(...await Promises.all(promises))\n  }\n  \n  return results\n}\n```\n\nAlthough this approach works it is not optimal because it limits each chunk execution time to the time of the slowest of the requests within the chunk where this very package will get one by one and execute a new one as soon as a previous one has ended.\n\nAnother advantage of this package is that it supports generators as its input, so you don't need to always use an array.\n","readmeFilename":"README.md"}