@henrygd/queue
Version:
Tiny async queue with concurrency control. Like p-limit or fastq, but smaller and faster.
2 lines (1 loc) • 472 B
JavaScript
let s=Promise,f=P=>{let o=0,n=0,r,l,u,t,d,a=()=>{o--,--n?m():t=u?.()},m=()=>{if(r&&o<P){o++;let e=r;r=r.e,e.p().then(i=>(e.r(i),a()),i=>(e.i(i),a()))}};return d={add(e){let i={p:e},T=new s((v,c)=>{i.r=v,i.i=c});return r?l=l.e=i:l=r=i,n++,m(),T},done:()=>n?t||(t=new s(e=>u=e)):s.resolve(),clear(){for(let e=r;e;e=e.e)e.i(new Error("Queue cleared"));r=l=null,n=o},active:()=>o,size:()=>n,all:e=>s.all(e.map(i=>d.add(typeof i=="function"?i:()=>i)))}};export{f as newQueue};