co-tasks
v0.4.0
Published
Task/Hook runner using co. Runs an array of tasks in series.
Downloads
8
Maintainers
Readme
co-tasks
Task or hook runner using co. Runs an array of tasks in series.
.run([tasks], [ctx], [args], [timeout])
var TaskRunner = require('co-tasks');
var taskRunner = new TaskRunner();
// Add tasks
taskRunner.registerTask('foo', function(done) {
console.log('Foo one');
done();
});
taskRunner.registerTask('foo', function(done) {
console.log('Foo two');
done();
});
taskRunner.registerTask('pre-foo', function(done) {
console.log('Start');
done();
});
taskRunner.registerTask('post-foo', function(done) {
console.log('After foo');
done();
});
taskRunner.registerTask('finish', function(done) {
console.log('Finish');
done();
});
// Call tasks
taskRunner.run(['foo', 'finish']);
// You'll see, pre-* and post-* tasks will be calling as well
// Output
Start
Foo one
Foo two
After foo
Finish
.pipe([tasks], [ctx], pipeObj, [timeout])
Runns tasks in series, pipes pipeObj
through all tasks in series
tasks
Task names, this can be optional if allowedTasks option is set.ctx
This contextpipeObj
Pipe through objecttimeout
Timpout in milliseconds. Defaults to 30000
yieldables
We call yieldable a function, a generator or a promise, supported by co-task.
Promises
taskRunner.registerTask('foo', new Promise(function(resolve, reject) {
resolve('apple');
});
Generators
taskRunner.registerTask('foo', function *() {
return 'banana';
}
Callback functions
taskRunner.registerTask('foo', function(done) {
done(null, 'coconut');
}
Callbacks with promises
taskRunner.registerTask('foo', function(promise) {
promise.resolve('date');
}
Promise returning functions
taskRunner.registerTask('foo', function(promise) {
return Promise.resolve('elderberry');
}
Call it all together
taskRunner.run(['foo']).then(function(result) {
console.log(result);
// result === [
// {
// task: 'foo',
// results: ['apple', 'banana', 'coconut', 'date', 'elderberry']
// }
// ]
}).catch(function(err) {
// Error handling
});
Arguments and this context
Passing arguments or a this context to yieldable is very easy. co-tasks accepts a this context as second parameter and an arguments array as third parameter. Both of them are optional.
let ctx = {
prefix: '#'
};
let args = ['apple', 'banana'];
taskRunner.registerTask('foo', function *(arg1, arg2) {
return this.prefix + arg1;
});
taskRunner.registerTask('foo', function *(arg1, arg2) {
return this.prefix + arg2;
});
taskRunner(['foo'], ctx, args).then(function(result) {
//result contains
[{
task: 'foo',
results: ['#apple', '#banana']
}]
}).catch(function(err) {
// Error handling
});
Timeout
co-tasks timeouts after 30 seconds by default. The timeout can be changed by passing a number of milliseconds as fourth or last parameter
var promise = taskRunner(['foo'], ctx, args, 500);