var config = require('./config'); var queue = {}; function startWorker(ctx) { // no more tasks, quit now if (ctx.tasks.length === 0) { if (--ctx.workers === 0 && ctx.cb) ctx.cb(); return; } var task = ctx.tasks.shift(); ctx.doTask(task, function(e) { // TODO: could retry failed task here. startWorker(ctx); }); } queue.run = function(tasks, doTask, cb) { var ctx = { tasks: tasks, doTask: doTask, cb: cb, workers: config.MAX_WORKERS }; for (var i = 0; i < ctx.workers; ++i) { startWorker(ctx); } }; module.exports = queue;