This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
633 B
42 lines
633 B
'use strict'; |
|
const pTry = require('p-try'); |
|
|
|
module.exports = concurrency => { |
|
if (concurrency < 1) { |
|
throw new TypeError('Expected `concurrency` to be a number from 1 and up'); |
|
} |
|
|
|
const queue = []; |
|
let activeCount = 0; |
|
|
|
const next = () => { |
|
activeCount--; |
|
|
|
if (queue.length > 0) { |
|
queue.shift()(); |
|
} |
|
}; |
|
|
|
return fn => new Promise((resolve, reject) => { |
|
const run = () => { |
|
activeCount++; |
|
|
|
pTry(fn).then( |
|
val => { |
|
resolve(val); |
|
next(); |
|
}, |
|
err => { |
|
reject(err); |
|
next(); |
|
} |
|
); |
|
}; |
|
|
|
if (activeCount < concurrency) { |
|
run(); |
|
} else { |
|
queue.push(run); |
|
} |
|
}); |
|
};
|
|
|