diff options
author | Alex Early <alexander.early@gmail.com> | 2016-07-07 17:22:06 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-07 17:22:06 -0700 |
commit | 36c97b7fff9b4d71a14a3d240148486c8e41197a (patch) | |
tree | 0e2538222556a637af77903c4616c076991eff76 | |
parent | 3216dd903c1aa31958c1c41a45d9cacadaac524a (diff) | |
parent | f21e7dbeefe37d32d592cb80992def758c023629 (diff) | |
download | async-36c97b7fff9b4d71a14a3d240148486c8e41197a.tar.gz |
Merge pull request #1214 from caolan/queue-opts
Optimize queue processing
-rw-r--r-- | lib/internal/queue.js | 13 |
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; |