diff options
author | Graeme Yeates <yeatesgraeme@gmail.com> | 2016-07-03 19:08:33 -0400 |
---|---|---|
committer | Graeme Yeates <yeatesgraeme@gmail.com> | 2016-07-03 19:09:19 -0400 |
commit | ef05d55e1bbe1a8c823eaa4d5e0de6f5818ff27e (patch) | |
tree | 1eea04676c98876d62da2b427aa73f9a02c5e169 | |
parent | 5d66b2abcf3e68da1f8d397d44a246f7c562a3da (diff) | |
download | async-ef05d55e1bbe1a8c823eaa4d5e0de6f5818ff27e.tar.gz |
Optimize queue processing
-rw-r--r-- | lib/internal/queue.js | 16 |
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; |