MCPcopy
hub / github.com/caolan/async / queue

Function queue

lib/internal/queue.js:11–159  ·  view source on GitHub ↗
(worker, concurrency, payload)

Source from the content-addressed store, hash-verified

9import wrapAsync from './wrapAsync';
10
11export default function queue(worker, concurrency, payload) {
12 if (concurrency == null) {
13 concurrency = 1;
14 }
15 else if(concurrency === 0) {
16 throw new Error('Concurrency must not be zero');
17 }
18
19 var _worker = wrapAsync(worker);
20 var numRunning = 0;
21 var workersList = [];
22
23 function _insert(data, insertAtFront, callback) {
24 if (callback != null && typeof callback !== 'function') {
25 throw new Error('task callback must be a function');
26 }
27 q.started = true;
28 if (!isArray(data)) {
29 data = [data];
30 }
31 if (data.length === 0 && q.idle()) {
32 // call drain immediately if there are no tasks
33 return setImmediate(function() {
34 q.drain();
35 });
36 }
37
38 for (var i = 0, l = data.length; i < l; i++) {
39 var item = {
40 data: data[i],
41 callback: callback || noop
42 };
43
44 if (insertAtFront) {
45 q._tasks.unshift(item);
46 } else {
47 q._tasks.push(item);
48 }
49 }
50 setImmediate(q.process);
51 }
52
53 function _next(tasks) {
54 return rest(function(args){
55 numRunning -= 1;
56
57 for (var i = 0, l = tasks.length; i < l; i++) {
58 var task = tasks[i];
59 var index = indexOf(workersList, task, 0);
60 if (index >= 0) {
61 workersList.splice(index)
62 }
63
64 task.callback.apply(task, args);
65
66 if (args[0] != null) {
67 q.error(args[0], task.data);
68 }

Callers 3

priorityQueue.jsFile · 0.85
queue.jsFile · 0.85
cargoFunction · 0.85

Calls 4

wrapAsyncFunction · 0.85
_insertFunction · 0.85
onlyOnceFunction · 0.85
_nextFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…