From aa1ec94791542df69c3b22c071bd1e9e77bcb42f Mon Sep 17 00:00:00 2001 From: Alexander Early Date: Tue, 10 Jul 2018 21:16:45 -0700 Subject: tighten up implementation --- lib/internal/asyncEachOfLimit.js | 10 +++++++--- 1 file 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) -- cgit v1.2.1