1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- '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 ) {
- if ( this.__queue__.length === 0 ) return skip();
- setImmediate( this.shift().task.bind(null, done) );
- };
|