diff options
-rw-r--r-- | lib/internal/asyncEachOfLimit.js | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/internal/asyncEachOfLimit.js b/lib/internal/asyncEachOfLimit.js index a34bf0a..403915b 100644 --- a/lib/internal/asyncEachOfLimit.js +++ b/lib/internal/asyncEachOfLimit.js @@ -10,15 +10,17 @@ export default function asyncEachOfLimit(generator, limit, iteratee, callback) { function replenish() { //console.log('replenish') - if (running >= limit || awaiting) return + 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; @@ -32,24 +34,26 @@ export default function asyncEachOfLimit(generator, limit, iteratee, callback) { function iterateeCallback(err, result) { //console.log('iterateeCallback') - if (canceled) return running -= 1; + if (canceled) return if (err) return handleError(err) if (err === false) { done = true; canceled = true; + return } if (result === breakLoop || (done && running <= 0)) { done = true; - //console.log('done') + //console.log('done iterCb') return callback(null); } replenish() } function handleError(err) { + if (canceled) return awaiting = false done = true callback(err) |