UNPKG

use-async-queue

Version:
3 lines (2 loc) 1.33 kB
import{useState as n,useRef as t,useEffect as r,useCallback as e}from"react";import u from"next-tick";function i(){return i=Object.assign?Object.assign.bind():function(n){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var e in r)({}).hasOwnProperty.call(r,e)&&(n[e]=r[e])}return n},i.apply(null,arguments)}function c(c){const{done:o,drain:s,inflight:l}=c;let{concurrency:m}=c;m=m||Infinity,m<1&&(m=Infinity);const[g,a]=n({numPending:0,numInFlight:0,numDone:0}),h=t(!0),d=t([]),f=t([]);r(()=>{if(g.numDone>0&&s&&0===d.current.length&&0===f.current.length&&!h.current)return h.current=!0,u(s);for(;d.current.length<m&&f.current.length>0;){h.current=!1;const n=f.current.shift();if(n){d.current.push(n),a(n=>i({},n,{numPending:n.numPending-1,numInFlight:n.numInFlight+1})),l&&l(i({},n,{stats:g}));const t=n.task();t.then(()=>{d.current.pop(),a(n=>i({},n,{numInFlight:n.numInFlight-1,numDone:n.numDone+1})),o&&o(i({},n,{result:t,stats:g}))}).catch(()=>{d.current.pop(),a(n=>i({},n,{numInFlight:n.numInFlight-1,numDone:n.numDone+1})),o&&o(i({},n,{result:t,stats:g}))})}}},[m,o,s,l,g]);const p=e(n=>{f.current.find(t=>t.id===n.id)||d.current.find(t=>t.id===n.id)||(f.current.push(n),a(n=>i({},n,{numPending:n.numPending+1})))},[]);return{add:p,stats:g}}export{c as default}; //# sourceMappingURL=use-async-queue.modern.mjs.map