UNPKG

@ezdevlol/memfs

Version:

In-memory file-system with Node's fs API.

41 lines (40 loc) 942 B
import { go } from './go'; class Task { code; resolve; reject; promise = new Promise((resolve, reject) => { this.resolve = resolve; this.reject = reject; }); constructor(code) { this.code = code; } } /** Limits concurrency of async code. */ export const concurrency = (limit) => { let workers = 0; const queue = new Set(); const work = async () => { const task = queue.values().next().value; if (task) queue.delete(task); else return; workers++; try { task.resolve(await task.code()); } catch (error) { task.reject(error); } finally { workers--, queue.size && go(work); } }; return async (code) => { const task = new Task(code); queue.add(task); return workers < limit && go(work), task.promise; }; };