summaryrefslogtreecommitdiff
path: root/lib/internal/queue.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/internal/queue.js')
-rw-r--r--lib/internal/queue.js27
1 files changed, 13 insertions, 14 deletions
diff --git a/lib/internal/queue.js b/lib/internal/queue.js
index 41d6c90..d318ba0 100644
--- a/lib/internal/queue.js
+++ b/lib/internal/queue.js
@@ -1,4 +1,4 @@
-import arrayEach from 'lodash/_arrayEach';
+import indexOf from 'lodash/_baseIndexOf';
import isArray from 'lodash/isArray';
import noop from 'lodash/noop';
import rest from 'lodash/rest';
@@ -23,15 +23,16 @@ export default function queue(worker, concurrency, payload) {
if (!isArray(data)) {
data = [data];
}
- if(data.length === 0 && q.idle()) {
+ if (data.length === 0 && q.idle()) {
// call drain immediately if there are no tasks
return setImmediate(function() {
q.drain();
});
}
- arrayEach(data, function(task) {
+
+ for (var i = 0, l = data.length; i < l; i++) {
var item = {
- data: task,
+ data: data[i],
callback: callback || noop
};
@@ -40,8 +41,7 @@ export default function queue(worker, concurrency, payload) {
} else {
q._tasks.push(item);
}
-
- });
+ }
setImmediate(q.process);
}
@@ -49,20 +49,19 @@ export default function queue(worker, concurrency, payload) {
return rest(function(args){
workers -= 1;
- arrayEach(tasks, function (task) {
- arrayEach(workersList, function (worker, index) {
- if (worker === task) {
- workersList.splice(index, 1);
- return false;
- }
- });
+ for (var i = 0, l = tasks.length; i < l; i++) {
+ var task = tasks[i];
+ var index = indexOf(workersList, task, 0);
+ if (index >= 0) {
+ workersList.splice(index)
+ }
task.callback.apply(task, args);
if (args[0] != null) {
q.error(args[0], task.data);
}
- });
+ }
if (workers <= (q.concurrency - q.buffer) ) {
q.unsaturated();