in case of processing a very large array e.g. Promise.all(A_VERY_LARGE_ARRAY_OF_XHR_PROMISE)
which would probably blow you browser memory by trying to send all requests at the same time
solution is limit the concurrent of requests, and wrap promise in thunk
Promise.allConcurrent(2)([()=>fetch('BLAH1'), ()=>fetch('BLAH2'),...()=>fetch('BLAHN')])
if set concurrent to 2, it will send request BLAH1 and BLAH2 at the same time
if BLAH1 return response and resolved, will immediatly send request to BLAH3
in this way promise sending at the same time always keep the limit 2 which we’ve just configed before
More efficient (no splicing, only index based operations) Typescript version, with order preservation and early exit error handling semantics
Usage:
Though I prefer a version that avoids creating a bunch of closures, as so: