You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
934 B
44 lines
934 B
'use strict'; |
|
var _ = require('lodash'); |
|
|
|
module.exports = SubQueue; |
|
|
|
function SubQueue() { |
|
this.__queue__ = []; |
|
} |
|
|
|
/** |
|
* Add a task to this queue |
|
* @param {Function} task |
|
*/ |
|
|
|
SubQueue.prototype.push = function( task, opt ) { |
|
opt = opt || {}; |
|
|
|
// Don't register named task if they're already planned |
|
if ( opt.once && _.find(this.__queue__, { name: opt.once }) ) { |
|
return; |
|
} |
|
|
|
this.__queue__.push({ task: task, name: opt.once }); |
|
}; |
|
|
|
/** |
|
* Return the first entry of this queue |
|
* @return {Function} The first task |
|
*/ |
|
|
|
SubQueue.prototype.shift = function() { |
|
return this.__queue__.shift(); |
|
}; |
|
|
|
/** |
|
* Run task |
|
* @param {Function} skip Callback if no task is available |
|
* @param {Function} done Callback once the task is completed |
|
*/ |
|
|
|
SubQueue.prototype.run = function( skip, done, pause ) { |
|
if ( this.__queue__.length === 0 ) return skip(); |
|
setImmediate( this.shift().task.bind(null, done, pause) ); |
|
};
|
|
|