@vlsergey/batcher

1.0.0 • Public • Published

@vlsergey/batcher

Small JavaScript module to batch async requests with queue.

NPM version Downloads

Installation

npm i --save @vlsergey/batcher

or

npm i --save-dev @vlsergey/batcher

Usage

/* Define function that will do actual work. Not for single,
but for collection of keys. */
const batchFunction = async ( allArgs ) => {
  // allArgs is array of arrays (unless flattenArguments specified )
  const response = fetch( /*...*/ );
  if ( !response.ok ) {
    console.error( response );
    throw new Error( "Unable to fetch API result: " + response.statusText );
  }
  // return the array of result
  // length of result array MUST be the same as length of allArgs
  // order IS important
  return await response.json();
}
const batcher = new Batcher( batchFunction );
/* ... */

// Queue single call
const aPromise = batcher.queue( 'Test value' ); // is't a Promise
aPromise.then( someResultA => { /*...*/ } );

// Still single call with multiple arguments
const bPromise = batcher.queue( 'arg0', 'arg1' ); // is't a Promise
bPromise.then( someResultB => { /*...*/ } );

// Queue 2 calls with different number of arguments
const allPromises = batcher.queueAll( [ 'arg3' ], [ 'arg3', 'arg4' ] ); // Also a Promise, but obtained from Promise.all( ... ) call
allPromises.then( ( values ) => /* ... */ );

// Technically will wait, but looks nice in code in async functions
const gimmeResultNow = await batcher.queue( someRequest );

API

Constructor

const batcher = new Batcher( batchFunction );
const batcher = new Batcher( batchFunction, options );

Options

Option Default Value Description
delay 0 Delay between batch function calls. Ignored if item added to queue.
flattenArguments false If true before call all queued arguments will be flatten to single array (using args.flatMap( a => a ) call). It is useful if Batcher is used for single-key calls. Otherwise it will create problems with multi-argument calls
maxBatchSize 50 max size of batch for single batchFunction call
maxQueueSize Number.MAX_SAFE_INTEGER Max items in queue. Error will be thrown on queue attempt if exceed.

Methods

queue( arg0, arg1, ... ) -- adds single element to queue. Immediately calls batchFunction if not in progress.

queueAll( [arg00, arg00], [arg10, arg11], ... ) -- adds multiple elements to queue. Immediately calls batchFunction if not in progress.

Package Sidebar

Install

npm i @vlsergey/batcher

Weekly Downloads

0

Version

1.0.0

License

MIT

Unpacked Size

32.6 kB

Total Files

31

Last publish

Collaborators

  • vlsergey