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);