38 lines
		
	
	
		
			779 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			779 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'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;
 |