summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/internal/queue.js13
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/internal/queue.js b/lib/internal/queue.js
index 9debd64..e3887cb 100644
--- a/lib/internal/queue.js
+++ b/lib/internal/queue.js
@@ -1,6 +1,7 @@
import arrayEach from 'lodash/_arrayEach';
import isArray from 'lodash/isArray';
import noop from 'lodash/noop';
+import rest from 'lodash/rest';
import onlyOnce from './onlyOnce';
import setImmediate from './setImmediate';
@@ -45,16 +46,14 @@ export default function queue(worker, concurrency, payload) {
}
function _next(tasks) {
- return function(){
+ return rest(function(args){
workers -= 1;
- var removed = false;
- var args = arguments;
arrayEach(tasks, function (task) {
arrayEach(workersList, function (worker, index) {
- if (worker === task && !removed) {
+ if (worker === task) {
workersList.splice(index, 1);
- removed = true;
+ return false;
}
});
@@ -69,11 +68,11 @@ export default function queue(worker, concurrency, payload) {
q.unsaturated();
}
- if (q._tasks.length + workers === 0) {
+ if (q.idle()) {
q.drain();
}
q.process();
- };
+ });
}
var workers = 0;