diff options
author | Graeme Yeates <yeatesgraeme@gmail.com> | 2016-11-30 15:04:13 -0500 |
---|---|---|
committer | Graeme Yeates <yeatesgraeme@gmail.com> | 2016-11-30 15:04:13 -0500 |
commit | 11b699744d480de4c68373755132e91e522d3c90 (patch) | |
tree | ad14d10f6c960afd73b945faf6b3ad4c5b33fbf7 | |
parent | 7d51d6fca345080b44ed0a794f982c0965a5223e (diff) | |
download | async-q-process.tar.gz |
Defer q.process until the next tickasync-q-process
-rw-r--r-- | lib/internal/queue.js | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/lib/internal/queue.js b/lib/internal/queue.js index 15fb950..7755504 100644 --- a/lib/internal/queue.js +++ b/lib/internal/queue.js @@ -70,13 +70,12 @@ export default function queue(worker, concurrency, payload) { if (q.idle()) { q.drain(); } - q.process(); + setImmediate(q.process); }); } var workers = 0; var workersList = []; - var isProcessing = false; var q = { _tasks: new DLL(), concurrency: concurrency, @@ -100,12 +99,6 @@ export default function queue(worker, concurrency, payload) { _insert(data, true, callback); }, process: function () { - // Avoid trying to start too many processing operations. This can occur - // when callbacks resolve synchronously (#1267). - if (isProcessing) { - return; - } - isProcessing = true; while(!q.paused && workers < q.concurrency && q._tasks.length){ var tasks = [], data = []; var l = q._tasks.length; @@ -129,7 +122,6 @@ export default function queue(worker, concurrency, payload) { var cb = onlyOnce(_next(tasks)); worker(data, cb); } - isProcessing = false; }, length: function () { return q._tasks.length; @@ -149,12 +141,7 @@ export default function queue(worker, concurrency, payload) { resume: function () { if (q.paused === false) { return; } q.paused = false; - var resumeCount = Math.min(q.concurrency, q._tasks.length); - // Need to call q.process once per concurrent - // worker to preserve full concurrency after pause - for (var w = 1; w <= resumeCount; w++) { - setImmediate(q.process); - } + setImmediate(q.process); } }; return q; |