batch-process
In the real world, most async operations against large data sets need to be batched and throttled.
The batchProcess
function provides a simple, configurable utility for batching and throttling async operations.
batchProcess
logs the progress of batch operations to console
or to an injected logging dependency.
API Documentation • CHANGELOG
Installation
npm i @karmaniverous/batch-process
Usage
import { batchProcess } from '@karmaniverous/batch-process';
type Item = Record<string, unknown>;
interface AsyncResult {
processed: number;
unprocessed: Item[];
}
const processBatch = async (items: Item[]): AsyncResult =>
doSomethingAsync(items);
const unprocessedItemExtractor = ({ unprocessed }: AsyncResult) => unprocessed;
const items: Item[] = [
...
];
const results = await batchProcess(items, {
processBatch,
unprocessedItemExtractor,
});
batchProcess Options
The options
parameter has the following properties:
Default Batchable options are:
batchHandler | (items: Item[]) => Promise<Output> | required | Async function to process an individual batch. |
batchSize | number | 25 | The number of items to process in each batch. |
delayIncrement | number | 100 | The number of milliseconds to wait before retrying a failed batch, with 2x exponential backoff. |
logger | Pick<Console, 'debug'> | console | Injected logger object. Must support debug method. |
maxRetries | number | 5 | The number of times to retry a failed batch before throwing an exception. |
throttle | number | 10 | The number of batches to process in parallel. |
unprocessedItemExtractor | (output: Output) => Item[] ⏐ undefined | undefined | Function to extract unprocessed items from an individual batch output. If undefined no retries will be attempted. |
Built for you with ❤️ on Bali! Find more great tools & templates on my GitHub Profile.