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