Task Group
Group together synchronous and asynchronous tasks and execute them with support for concurrency, naming, and nesting.
Install
Backend
- Install Node.js
npm install --save taskgroup
Frontend
- See Browserify
Usage
Example
var TaskGroup = require('taskgroup').TaskGroup;
var group = new TaskGroup();
group.once('complete', function(err,results){
console.log(err);
console.log(JSON.stringify(results));
});
group.addTask(function(complete){
setTimeout(function(){
complete(null, 'first', 'task');
},500);
});
group.addTask(function(){
return 'second task';
});
group.addGroup(function(addGroup,addTask){
this.setConfig({concurrency:0});
addTask(function(complete){
setTimeout(function(){
complete(null, 'sub first', 'task');
},500);
});
addTask(function(){
return 'sub second task';
});
});
group.run();
TaskGroup API
new require('taskgroup').TaskGroup()
- Available methods:
constructor(name?,fn?)
- create our new group, the arguments name
and fn
are optional, refer to their entries in configurationsetConfig(config)
- set the configuration for the group, returns chainaddTask(args...)
- create a new task item with the arguments and adds it to the group, returns the new task itemaddGroup(args...)
- create a new group item with the arguments and adds it to the group, returns the new group itemclear()
- remove the remaining items to be executedstop()
- clear and pausepause()
- pause the execution of the itemsrun()
- start/resume executing the items, returns chain- All those of EventEmitter2
- Available configuration:
name
, no default - allows us to assign a name to the group, useful for debuggingfn(addGroup,addTask)
, no default - allows us to use an inline and self-executing style for defining groups, useful for nestingconcurrency
, defaults to 1
- how many items shall we allow to be run at the same time, set to 0
to allow unlimitedpauseOnError
, defaults to true
- if an error occurs in one of our items, should we stop executing any remaining items?
- setting to
false
will continue with execution with the other items even if an item experiences an error
- Available events:
run()
- fired just before we execute the itemscomplete(err, results)
- fired when all our items have completedtask.run()
- fired just before a task item executestask.complete(err, args...)
- fired when a task item has completedgroup.run()
- fired just before a group item executesgroup.complete(err, results)
- fired when a group item has completeditem.run()
- fired just before an item executes (fired for both sub-tasks and sub-groups)item.complete(err, args...)
- fired when an item has completed (fired for both sub-task and sub-groups)
Task API
new require('taskgroup').Task()
- Available methods:
constructor(name?,fn?)
- create our new task, the arguments name
and fn
are optional though fn
must be set at some point, refer to their entries in configurationsetConfig(config)
- set the configuration for the group, returns chainrun()
- execute the task
- Available configuration:
name
, no default - allows us to assign a name to the group, useful for debuggingfn(complete?)
, no default - must be set at some point, it is the function to execute for the task, if it is asynchronous it should use the completion callback provided
- Available events:
run()
- fired just before we execute the taskcomplete(err, args...)
- fired when the task has completed
History
You can discover the history inside the History.md file
License
Licensed under the incredibly permissive MIT License
Copyright © 2013+ Bevry Pty Ltd
Copyright © 2011-2012 Benjamin Arthur Lupton