UNPKG

use-async-queue

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