run-in-batch
v1.0.7
Published
Run your task like api calls in batch
Downloads
6
Maintainers
Readme
run-in-batch
Run your task like api calls in batch
features
- 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
install
To install the latest version:
npm install --save run-in-batch
examples
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"
options
Execute task in a batch parallely or sequentially
runType (Default: parallel)
- parallel
- series
Set number of tasks in one batch
batchSize (Optional)
- If not specified, all tasks will execute concurrently
- If specified, tasks are chunked by
batchSize
Set timeout for each task
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"
Callback function for completion of each task
onTaskRun (Optional)
- If not specified, empty array is returned
- If specified, this method is run for each task
Callback function for completion of each batch
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.
Callback function post completion of each batch
onBatchComplete (Optional)
- If not specified, no error is thrown
- If specified, this method is run post each batch completion
note
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.