concurrent-task
![Coverage Status](https://coveralls.io/repos/github/vigour-io/concurrent-task/badge.svg?branch=master)
A brisky-struct
instance to run async tasks in parallel with a concurrency limit
Installing
npm install concurrent-task --save
Usage
Below is an example of 5 tasks with 2 steps to execute for each. Each step has a run
method which returns an aborting function. If step is not resolved or rejected in time, it will be aborted and an error will be emitted.
const concurrent = require('concurrent-task')
const steps = [
{
timeout: 1000,
tryCount: 2,
run (task, resolve, reject) {
return clearTimeout.bind(null, setTimeout(() => {
return task.success ? resolve() : reject(new Error('some error'))
}, task.seconds * 1000))
}
},
{
timeout: 500,
tryCount: 3,
run (task, resolve, reject) {
return clearTimeout.bind(null, setTimeout(() => {
return task.success ? resolve({ [task.id]: 'result' }) : reject(new Error('some error'))
}, task.seconds * 1000))
}
}
]
const runner = concurrent(steps)
runner.addTask([
{ id: 'task1', seconds: 0.3, success: true },
{ id: 'task2', seconds: 0.7, success: true },
{ id: 'task3', seconds: 0.2, success: false },
{ id: 'task4', seconds: 1.2, success: false },
{ id: 'task5', seconds: 0.3, success: true }
])
runner
.on('error', (task, error) => {
})
.on('task-done', task => {
})
.on('complete', () => {
console.log(runner.status())
console.log(runner.results())
runner.set(null)
})
.run(2)