/ cloudformation-templates / node_modules / aws-cdk / node_modules / async / internal / asyncEachOfLimit.js
asyncEachOfLimit.js
1 'use strict'; 2 3 Object.defineProperty(exports, "__esModule", { 4 value: true 5 }); 6 exports.default = asyncEachOfLimit; 7 8 var _breakLoop = require('./breakLoop'); 9 10 var _breakLoop2 = _interopRequireDefault(_breakLoop); 11 12 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 13 14 // for async generators 15 function asyncEachOfLimit(generator, limit, iteratee, callback) { 16 let done = false; 17 let canceled = false; 18 let awaiting = false; 19 let running = 0; 20 let idx = 0; 21 22 function replenish() { 23 //console.log('replenish') 24 if (running >= limit || awaiting || done) return; 25 //console.log('replenish awaiting') 26 awaiting = true; 27 generator.next().then(({ value, done: iterDone }) => { 28 //console.log('got value', value) 29 if (canceled || done) return; 30 awaiting = false; 31 if (iterDone) { 32 done = true; 33 if (running <= 0) { 34 //console.log('done nextCb') 35 callback(null); 36 } 37 return; 38 } 39 running++; 40 iteratee(value, idx, iterateeCallback); 41 idx++; 42 replenish(); 43 }).catch(handleError); 44 } 45 46 function iterateeCallback(err, result) { 47 //console.log('iterateeCallback') 48 running -= 1; 49 if (canceled) return; 50 if (err) return handleError(err); 51 52 if (err === false) { 53 done = true; 54 canceled = true; 55 return; 56 } 57 58 if (result === _breakLoop2.default || done && running <= 0) { 59 done = true; 60 //console.log('done iterCb') 61 return callback(null); 62 } 63 replenish(); 64 } 65 66 function handleError(err) { 67 if (canceled) return; 68 awaiting = false; 69 done = true; 70 callback(err); 71 } 72 73 replenish(); 74 } 75 module.exports = exports['default'];