summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Yeates <yeatesgraeme@gmail.com>2016-11-30 15:04:13 -0500
committerGraeme Yeates <yeatesgraeme@gmail.com>2016-11-30 15:04:13 -0500
commit11b699744d480de4c68373755132e91e522d3c90 (patch)
treead14d10f6c960afd73b945faf6b3ad4c5b33fbf7
parent7d51d6fca345080b44ed0a794f982c0965a5223e (diff)
downloadasync-q-process.tar.gz
Defer q.process until the next tickasync-q-process
-rw-r--r--lib/internal/queue.js17
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;