Run your task like api calls in batch
- Run either parallely or serially
- Set number of tasks in one batch
- Set timeout for each task
- Callback function for completion of each task
- Callback function post completion of each batch
To install the latest version:
npm install --save run-in-batch
To perform one operation per batch, use 'onBatchRun`:
const run = require("run-in-batch");
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
const options = {
batchSize: 3,
onBatchRun: (value) => Promise.resolve(value)
};
const results = await run(arr, options);
To perform one operation for each item in the batch use 'onTaskRun`, while each batch tasks running concurrently:
const run = require("run-in-batch");
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
const options = {
batchSize: 3,
onTaskRun: (value) => Promise.resolve(value)
};
const results = await run(arr, options);
To perform one operation for each item in the batch use 'onTaskRun`, while each batch tasks running sequentially:
const run = require("run-in-batch");
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
const options = {
runType: "series",
batchSize: 3,
onTaskRun: (value) => Promise.resolve(value)
};
const results = await run(arr, options);
To use the results, after each batch completes:
const run = require("run-in-batch");
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
const options = {
batchSize: 3,
onTaskRun: (value) => Promise.resolve(value),
onBatchComplete: (tasks, options, results) => {
console.log(`Completed processing of ${results.length} tasks`);
}
};
const results = await run(arr, options);
// Completed processing of 3 tasks
// Completed processing of 6 tasks
// Completed processing of 9 tasks
// Completed processing of 12 tasks
// Completed processing of 13 tasks
To set timeout for each task's execution:
const run = require("run-in-batch");
const userIds = [
{ name: "Alex", time: 150 },
{ name: "Bob", time: 250 },
{ name: "Carol", time: 200 },
{ name: "Dennis", time: 50 },
{ name: "Eric", time: 100 }
];
const options = {
batchSize: 5,
onTaskRun: (user) =>
new Promise((resolve) => {
setTimeout(() => resolve(user.name), user.time);
}),
taskTimeout: 225
};
const results = await run(userIds, options);
// "Alex", "timeout", "Carol", "Dennis", "Eric"
runType (Default: parallel)
- parallel
- series
batchSize (Optional)
- If not specified, all tasks will execute concurrently
- If specified, tasks are chunked by
batchSize
taskTimeout (Optional)
- If not specified, all tasks will run indefinately
- If specified, each task races against this timeout. Value specified is considered as milliseconds.
If timeout happens, task would return:
taskTimeoutVal
Default value: "timeout"
onTaskRun (Optional)
- If not specified, empty array is returned
- If specified, this method is run for each task
onBatchRun (Optional)
- If not specified, you can opt to use
onTaskRun
for each item individually. - If specified, this method is run for each batch instead of processing each item individually.
onBatchComplete (Optional)
- If not specified, no error is thrown
- If specified, this method is run post each batch completion
The task array passed is spliced directly to optmise memory usage. If you intend to use it later, please clone it before calling run
.
Also, ES generators are used to fetch batches.