Process in chunks

by igalst

JavaScript

const ARRAY_SIZE = 100;
const ITEM_PROCESS_TIME = 1500;
const CHUNK_SIZE = 5;
const CHUNK_WAIT_TIME = 1000;

//===============================================================

const bigArr = [];
for (let i = 0; i < ARRAY_SIZE; i++) bigArr.push(i);

const processItem = (item) => {
	return new Promise(resolve => {
    setTimeout(() => {
      console.log(item);
      resolve();
    }, ITEM_PROCESS_TIME)
  });
}

//===============================================================

const processInChunks = (items, handler, chunkSize, chunkWaitTime = 1000) => {
	console.log('start chunk', items);
  const chunk = items.slice(0, chunkSize);
  items = items.slice(chunkSize);

  if (!chunk.length) {
		return;
  }
  
  const allProcesses = [];
  
  chunk.forEach(item => {
  	  allProcesses.push(handler(item));
  });
  
  Promise.all(allProcesses).then(() => {
  	setTimeout(() => {
    	processInChunks(items, handler, chunkSize, chunkWaitTime);
    }, chunkWaitTime);
  });
};

//===============================================================

processInChunks(bigArr, processItem, CHUNK_SIZE, CHUNK_WAIT_TIME);