UNPKG

use-async-queue

Version:
3 lines (2 loc) 1.18 kB
var n=require("react");function t(n){return n&&"object"==typeof n&&"default"in n?n:{default:n}}var e=/*#__PURE__*/t(require("next-tick"));module.exports=function(t){const{done:u,drain:r,inflight:i}=t;let{concurrency:c}=t;c=c||Infinity,c<1&&(c=Infinity);const[s,l]=n.useState({numPending:0,numInFlight:0,numDone:0}),o=n.useRef(!0),f=n.useRef([]),d=n.useRef([]);return n.useEffect(()=>{if(s.numDone>0&&r&&0===f.current.length&&0===d.current.length&&!o.current)return o.current=!0,e.default(r);for(;f.current.length<c&&d.current.length>0;){o.current=!1;const n=d.current.shift();if(n){f.current.push(n),l(n=>({...n,numPending:n.numPending-1,numInFlight:n.numInFlight+1})),i&&i({...n,stats:s});const t=n.task();t.then(()=>{f.current.pop(),l(n=>({...n,numInFlight:n.numInFlight-1,numDone:n.numDone+1})),u&&u({...n,result:t,stats:s})}).catch(()=>{f.current.pop(),l(n=>({...n,numInFlight:n.numInFlight-1,numDone:n.numDone+1})),u&&u({...n,result:t,stats:s})})}}},[c,u,r,i,s]),{add:n.useCallback(n=>{d.current.find(t=>t.id===n.id)||f.current.find(t=>t.id===n.id)||(d.current.push(n),l(n=>({...n,numPending:n.numPending+1})))},[]),stats:s}}; //# sourceMappingURL=use-async-queue.js.map