summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Early <alexander.early@gmail.com>2016-07-07 17:22:06 -0700
committerGitHub <noreply@github.com>2016-07-07 17:22:06 -0700
commit36c97b7fff9b4d71a14a3d240148486c8e41197a (patch)
tree0e2538222556a637af77903c4616c076991eff76
parent3216dd903c1aa31958c1c41a45d9cacadaac524a (diff)
parentf21e7dbeefe37d32d592cb80992def758c023629 (diff)
downloadasync-36c97b7fff9b4d71a14a3d240148486c8e41197a.tar.gz
Merge pull request #1214 from caolan/queue-opts
Optimize queue processing
-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;