Have ideas to improve npm?Join in the discussion! »

    @vlsergey/batcher

    0.3.1 • Public • Published

    @vlsergey/batcher

    Small JavaScript module to batch async requests with queue.

    NPM version Build Status 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.

    Install

    npm i @vlsergey/batcher

    DownloadsWeekly Downloads

    8

    Version

    0.3.1

    License

    MIT

    Unpacked Size

    27.1 kB

    Total Files

    16

    Last publish

    Collaborators

    • avatar