| ; | |
| 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; | |