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.
		
		
		
		
			
				
					38 lines
				
				779 B
			
		
		
			
		
	
	
					38 lines
				
				779 B
			| 
								 
											4 years ago
										 
									 | 
							
								'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;
							 |