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.
		
		
		
		
		
			
		
			
				
					
					
						
							56 lines
						
					
					
						
							980 B
						
					
					
				
			
		
		
	
	
							56 lines
						
					
					
						
							980 B
						
					
					
				'use strict';
 | 
						|
 | 
						|
module.exports = parallelLimit;
 | 
						|
 | 
						|
/*!
 | 
						|
 * ignore
 | 
						|
 */
 | 
						|
 | 
						|
function parallelLimit(fns, limit, callback) {
 | 
						|
  let numInProgress = 0;
 | 
						|
  let numFinished = 0;
 | 
						|
  let error = null;
 | 
						|
 | 
						|
  if (limit <= 0) {
 | 
						|
    throw new Error('Limit must be positive');
 | 
						|
  }
 | 
						|
 | 
						|
  if (fns.length === 0) {
 | 
						|
    return callback(null, []);
 | 
						|
  }
 | 
						|
 | 
						|
  for (let i = 0; i < fns.length && i < limit; ++i) {
 | 
						|
    _start();
 | 
						|
  }
 | 
						|
 | 
						|
  function _start() {
 | 
						|
    fns[numFinished + numInProgress](_done(numFinished + numInProgress));
 | 
						|
    ++numInProgress;
 | 
						|
  }
 | 
						|
 | 
						|
  const results = [];
 | 
						|
 | 
						|
  function _done(index) {
 | 
						|
    return (err, res) => {
 | 
						|
      --numInProgress;
 | 
						|
      ++numFinished;
 | 
						|
 | 
						|
      if (error != null) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      if (err != null) {
 | 
						|
        error = err;
 | 
						|
        return callback(error);
 | 
						|
      }
 | 
						|
 | 
						|
      results[index] = res;
 | 
						|
 | 
						|
      if (numFinished === fns.length) {
 | 
						|
        return callback(null, results);
 | 
						|
      } else if (numFinished + numInProgress < fns.length) {
 | 
						|
        _start();
 | 
						|
      }
 | 
						|
    };
 | 
						|
  }
 | 
						|
}
 |