Skip to content

Instantly share code, notes, and snippets.

@tweinfeld
tweinfeld / concurrent_promise.js
Last active October 15, 2015 10:03
Limit execution concurrency of promise generation functions
let allConcurrent = function(limit, generators){
return new Promise(function(resolveAll){
let plan = generators.map((generator)=>({ value: undefined, executed: false, settled: false, generator: generator }));
let executeBatch = () => {
plan
.filter(({ settled, executed })=> !executed || (executed && !settled))
.slice(0, limit)
.filter(({ executed }) => !executed)
.map(planItem => {
planItem.executed = true;
const combine = (...arrays)
=> [].concat(...arrays);
const compact = arr
=> arr.filter(el => el);
const contains = (() => Array.prototype.includes
? (arr, value) => arr.includes(value)
: (arr, value) => arr.some(el => el === value)
)();