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.
		
		
		
		
		
			
		
			
				
					74 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					74 lines
				
				2.0 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |     value: true | ||
|  | }); | ||
|  | exports.default = _eachOfLimit; | ||
|  | 
 | ||
|  | var _noop = require('lodash/noop'); | ||
|  | 
 | ||
|  | var _noop2 = _interopRequireDefault(_noop); | ||
|  | 
 | ||
|  | var _once = require('./once'); | ||
|  | 
 | ||
|  | var _once2 = _interopRequireDefault(_once); | ||
|  | 
 | ||
|  | var _iterator = require('./iterator'); | ||
|  | 
 | ||
|  | var _iterator2 = _interopRequireDefault(_iterator); | ||
|  | 
 | ||
|  | var _onlyOnce = require('./onlyOnce'); | ||
|  | 
 | ||
|  | var _onlyOnce2 = _interopRequireDefault(_onlyOnce); | ||
|  | 
 | ||
|  | var _breakLoop = require('./breakLoop'); | ||
|  | 
 | ||
|  | var _breakLoop2 = _interopRequireDefault(_breakLoop); | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
|  | 
 | ||
|  | function _eachOfLimit(limit) { | ||
|  |     return function (obj, iteratee, callback) { | ||
|  |         callback = (0, _once2.default)(callback || _noop2.default); | ||
|  |         if (limit <= 0 || !obj) { | ||
|  |             return callback(null); | ||
|  |         } | ||
|  |         var nextElem = (0, _iterator2.default)(obj); | ||
|  |         var done = false; | ||
|  |         var running = 0; | ||
|  |         var looping = false; | ||
|  | 
 | ||
|  |         function iterateeCallback(err, value) { | ||
|  |             running -= 1; | ||
|  |             if (err) { | ||
|  |                 done = true; | ||
|  |                 callback(err); | ||
|  |             } else if (value === _breakLoop2.default || done && running <= 0) { | ||
|  |                 done = true; | ||
|  |                 return callback(null); | ||
|  |             } else if (!looping) { | ||
|  |                 replenish(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         function replenish() { | ||
|  |             looping = true; | ||
|  |             while (running < limit && !done) { | ||
|  |                 var elem = nextElem(); | ||
|  |                 if (elem === null) { | ||
|  |                     done = true; | ||
|  |                     if (running <= 0) { | ||
|  |                         callback(null); | ||
|  |                     } | ||
|  |                     return; | ||
|  |                 } | ||
|  |                 running += 1; | ||
|  |                 iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback)); | ||
|  |             } | ||
|  |             looping = false; | ||
|  |         } | ||
|  | 
 | ||
|  |         replenish(); | ||
|  |     }; | ||
|  | } | ||
|  | module.exports = exports['default']; |