diff options
author | Alexander Early <alex@npmjs.com> | 2018-07-10 21:16:45 -0700 |
---|---|---|
committer | Alexander Early <alex@npmjs.com> | 2018-07-10 21:16:45 -0700 |
commit | aa1ec94791542df69c3b22c071bd1e9e77bcb42f (patch) | |
tree | acf5165333d405f1abc54438fe8a1cf1fe2f5759 | |
parent | 8567a7fd6c81ece8fcb2fbc4be29db18f454cee8 (diff) | |
download | async-generator-support.tar.gz |
tighten up implementationasync-generator-support
-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) |