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'];
							 |