Skip to content

Instantly share code, notes, and snippets.

@gnud
Created September 14, 2015 21:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gnud/34e60d1ec99eb379dc5a to your computer and use it in GitHub Desktop.
Save gnud/34e60d1ec99eb379dc5a to your computer and use it in GitHub Desktop.
Evented parallel task execution (todo: will add parallel for loop)
var EventEmitter = require('events');
function task1() {
var taskName = 'task1';
console.log(taskName, this.tasksResult);
var result = 1;
ee.emit('task-done', {
'action': taskName,
'result': result
});
}
function task2() {
var taskName = 'task2';
console.log(taskName, this.tasksResult);
var result = 2;
ee.emit('task-done', {
'action': taskName,
'result': result
});
}
function task3() {
var taskName = 'task3';
console.log(taskName, this.tasksResult);
var result = 3;
ee.emit('task-done', {
'action': taskName,
'result': result
});
}
function task4() {
var taskName = 'task4';
console.log(taskName, this.tasksResult);
var result = 4;
ee.emit('task-done', {
'action': taskName,
'result': result
});
}
tasksList = [task1, task2, task3, task4];
module.exports.doTask1 = function(req, res) {
ee = new EventEmitter.EventEmitter();
var tasksResult = {};
ee.on('task-done', function(result) {
console.log('task-done', result);
tasksResult[result['action']] = result['result'];
var totalResults = Object.keys(tasksResult).length;
if (totalResults <= tasksList.length-1) return;
console.log('tasks done', tasksResult);
finish();
});
var taskExecuteFn = function(task, t) {
this.tasksResult = tasksResult;
task.call(this);
}
var finish = function() {
res.end(JSON.stringify(tasksResult));
}
tasksList.forEach(taskExecuteFn);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment