123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 'use strict';
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = asyncEachOfLimit;
-
- var _breakLoop = require('./breakLoop');
-
- var _breakLoop2 = _interopRequireDefault(_breakLoop);
-
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
- // for async generators
- function asyncEachOfLimit(generator, limit, iteratee, callback) {
- let done = false;
- let canceled = false;
- let awaiting = false;
- let running = 0;
- let idx = 0;
-
- function replenish() {
- //console.log('replenish')
- if (running >= limit || awaiting || done) return;
- //console.log('replenish awaiting')
- awaiting = true;
- generator.next().then(({ value, done: iterDone }) => {
- //console.log('got value', value)
- if (canceled || done) return;
- awaiting = false;
- if (iterDone) {
- done = true;
- if (running <= 0) {
- //console.log('done nextCb')
- callback(null);
- }
- return;
- }
- running++;
- iteratee(value, idx, iterateeCallback);
- idx++;
- replenish();
- }).catch(handleError);
- }
-
- function iterateeCallback(err, result) {
- //console.log('iterateeCallback')
- running -= 1;
- if (canceled) return;
- if (err) return handleError(err);
-
- if (err === false) {
- done = true;
- canceled = true;
- return;
- }
-
- if (result === _breakLoop2.default || done && running <= 0) {
- done = true;
- //console.log('done iterCb')
- return callback(null);
- }
- replenish();
- }
-
- function handleError(err) {
- if (canceled) return;
- awaiting = false;
- done = true;
- callback(err);
- }
-
- replenish();
- }
- module.exports = exports['default'];
|