summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Yeates <yeatesgraeme@gmail.com>2016-07-03 19:08:33 -0400
committerGraeme Yeates <yeatesgraeme@gmail.com>2016-07-03 19:09:19 -0400
commitef05d55e1bbe1a8c823eaa4d5e0de6f5818ff27e (patch)
tree1eea04676c98876d62da2b427aa73f9a02c5e169
parent5d66b2abcf3e68da1f8d397d44a246f7c562a3da (diff)
downloadasync-ef05d55e1bbe1a8c823eaa4d5e0de6f5818ff27e.tar.gz
Optimize queue processing
-rw-r--r--lib/internal/queue.js16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/internal/queue.js b/lib/internal/queue.js
index 9debd64..dcf376e 100644
--- a/lib/internal/queue.js
+++ b/lib/internal/queue.js
@@ -1,6 +1,8 @@
import arrayEach from 'lodash/_arrayEach';
+import arraySome from 'lodash/_arraySome';
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 +47,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) {
+ arraySome(workersList, function (worker, index) {
+ if (worker === task) {
workersList.splice(index, 1);
- removed = true;
+ return true;
}
});
@@ -69,11 +69,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;