ionic
Version:
A tool for creating and developing Ionic Framework mobile apps.
58 lines (47 loc) • 1.22 kB
JavaScript
/**
* node-archiver
*
* Copyright (c) 2012-2014 Chris Talkington, contributors.
* Licensed under the MIT license.
* https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
*/
var inherits = require('util').inherits;
var EventEmitter = require('events').EventEmitter;
var Queue = module.exports = function() {
EventEmitter.call(this);
this.closed = false;
this.ended = false;
this.waiting = false;
this.entries = [];
};
inherits(Queue, EventEmitter);
Queue.prototype.add = function(obj) {
if (this.closed) {
this.emit('error', new Error('can\'t add queue entry after close'));
} else {
this.entries.push(obj);
this.run();
}
};
Queue.prototype.close = function() {
this.closed = true;
this.run();
};
Queue.prototype.next = function() {
this.waiting = false;
this.run();
};
Queue.prototype.run = function() {
if (this.waiting || (this.closed && this.ended)) {
return;
}
if (this.entries.length === 0) {
if (this.closed) {
this.emit('end');
this.ended = true;
}
return;
}
this.waiting = true;
this.emit('entry', this.entries.shift(), this.next.bind(this));
};