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