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.
|
|
'use strict';
Object.defineProperty(exports, "__esModule", { value: true});exports.default = asyncEachOfLimit;
var _breakLoop = require('./breakLoop.js');
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;
|