|
|
|
/**
|
|
|
|
* Responsible for sequentially executing actions on the database
|
|
|
|
* async.queue is actually slowing down the code (10% hit on inserts, 3% on updates/removes)
|
|
|
|
* That's not critical for the intended uses but I may reimplement this in the future
|
|
|
|
*/
|
|
|
|
|
|
|
|
var async = require('async')
|
|
|
|
;
|
|
|
|
|
|
|
|
function Executor () {
|
|
|
|
this.queue = async.queue(function (task, cb) {
|
|
|
|
var callback
|
|
|
|
, lastArg = task.arguments[task.arguments.length - 1]
|
|
|
|
;
|
|
|
|
|
|
|
|
// Always tell the queue task is complete. Execute callback if any was given.
|
|
|
|
if (typeof lastArg === 'function') {
|
|
|
|
callback = function () {
|
|
|
|
lastArg.apply(null, arguments);
|
|
|
|
cb();
|
|
|
|
};
|
|
|
|
|
|
|
|
task.arguments[task.arguments.length - 1] = callback;
|
|
|
|
} else {
|
|
|
|
callback = function () {
|
|
|
|
cb();
|
|
|
|
};
|
|
|
|
|
|
|
|
task.arguments.push(callback);
|
|
|
|
}
|
|
|
|
|
|
|
|
task.fn.apply(task.this, task.arguments);
|
|
|
|
}, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Executor.prototype.push = function () {
|
|
|
|
this.queue.push.apply(this, arguments);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Interface
|
|
|
|
module.exports = Executor;
|