function pooledMap(poolLimit, array, iteratorFn) {
  // Create the async iterable that is returned from this function.
  const res = new TransformStream({
    async transform(p, controller) {
      controller.enqueue(await p);
    },
  });
  // Start processing items from the iterator
  (async () => {
    const writer = res.writable.getWriter();
    const executing = [];
    for await (const item of array) {
      const p = Promise.resolve().then(() => iteratorFn(item));
      writer.write(p);
      const e = p.then(() => executing.splice(executing.indexOf(e), 1));
      executing.push(e);
      if (executing.length >= poolLimit) {
        await Promise.race(executing);
      }
    }
    // Wait until all ongoing events have processed, then close the writer.
    await Promise.all(executing);
    writer.close();
  })();
  return res.readable.getIterator();
}
/**
 * pooledMap transforms values from an (async) iterable into another async
 * iterable. The transforms are done concurrently, with a max concurrency
 * defined by the poolLimit.
 *
 * @param poolLimit The maximum count of items being processed concurrently.
 * @param array The input array for mapping.
 * @param iteratorFn The function to call for every item of the array.
 */
pooledMap transforms values from an (async) iterable into another async
iterable. The transforms are done concurrently, with a max concurrency
defined by the poolLimit.

@param poolLimit The maximum count of items being processed concurrently.
@param array The input array for mapping.
@param iteratorFn The function to call for every item of the array.
pooledMap transforms values from an ( async ) iterable into another async iterable . The transforms are done concurrently with a max concurrency defined by the poolLimit . @param poolLimit The maximum count of items being processed concurrently . @param array The input array for mapping . @param iteratorFn The function to call for every item of the array .
function pooledMap(poolLimit, array, iteratorFn) {
  const res = new TransformStream({
    async transform(p, controller) {
      controller.enqueue(await p);
    },
  });
  (async () => {
    const writer = res.writable.getWriter();
    const executing = [];
    for await (const item of array) {
      const p = Promise.resolve().then(() => iteratorFn(item));
      writer.write(p);
      const e = p.then(() => executing.splice(executing.indexOf(e), 1));
      executing.push(e);
      if (executing.length >= poolLimit) {
        await Promise.race(executing);
      }
    }
    await Promise.all(executing);
    writer.close();
  })();
  return res.readable.getIterator();
}
function pooledMap ( poolLimit , array , iteratorFn ) { const res = new TransformStream ( { async transform ( p , controller ) { controller . enqueue ( await p ) ; } , } ) ; ( async ( ) => { const writer = res . writable . getWriter ( ) ; const executing = [ ] ; for await ( const item of array ) { const p = Promise . resolve ( ) . then ( ( ) => iteratorFn ( item ) ) ; writer . write ( p ) ; const e = p . then ( ( ) => executing . splice ( executing . indexOf ( e ) , 1 ) ) ; executing . push ( e ) ; if ( executing . length >= poolLimit ) { await Promise . race ( executing ) ; } } await Promise . all ( executing ) ; writer . close ( ) ; } ) ( ) ; return res . readable . getIterator ( ) ; }
pooledMap transforms values from an (async) iterable into another async
 iterable.
pooledMap transforms values from an ( async ) iterable into another async iterable .
// Create the async iterable that is returned from this function. // Start processing items from the iterator // Wait until all ongoing events have processed, then close the writer.