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.
		
		
		
		
		
			
		
			
				
					
					
						
							37 lines
						
					
					
						
							779 B
						
					
					
				
			
		
		
	
	
							37 lines
						
					
					
						
							779 B
						
					
					
				'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;
 | 
						|
 |