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.
|
|
'use strict';
var RingBuffer = require('./ring_buffer');
var Pledge = function() { this._complete = false; this._callbacks = new RingBuffer(Pledge.QUEUE_SIZE); };
Pledge.QUEUE_SIZE = 4;
Pledge.all = function(list) { var pledge = new Pledge(), pending = list.length, n = pending;
if (pending === 0) pledge.done();
while (n--) list[n].then(function() { pending -= 1; if (pending === 0) pledge.done(); }); return pledge; };
Pledge.prototype.then = function(callback) { if (this._complete) callback(); else this._callbacks.push(callback); };
Pledge.prototype.done = function() { this._complete = true; var callbacks = this._callbacks, callback; while (callback = callbacks.shift()) callback(); };
module.exports = Pledge;
|