UNPKG

ciorent

Version:

A lightweight, low-overhead concurrency library

1 lines 469 B
export let init=e=>{let r=[,];let i=[r,r,e,e=>{i[0]=i[0][0]=[,e]}];return i};export let acquire=e=>{if(--e[2]<0)return new Promise(e[3])};export let release=e=>{if(e[2]++<0)(e[1]=e[1][0])[1]()};export let control=(e,r)=>async(...a)=>{if(--r[2]<0)await new Promise(r[3]);try{return await e(...a)}finally{release(r)}};export let permits=(r,i)=>control(r,init(i));export let queue=async(e,r)=>{if(--e[2]<0)await new Promise(e[3]);try{return await r()}finally{release(e)}};