Skip to content

Instantly share code, notes, and snippets.

@aheld
Created April 14, 2022 17:08

Revisions

  1. aheld created this gist Apr 14, 2022.
    28 changes: 28 additions & 0 deletions batcher.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,28 @@
    job = (input, batchNumber) => {
    return new Promise((resolve, reject) => {
    setTimeout(() => {
    console.log('Running batch ',batchNumber, 'processing ', input)
    resolve('completed ' + input)
    }, 1000)
    })
    }

    async function batcher(inputArray, fn, batchSize) {
    const results = []
    batchNumber = 0
    for (let i = 0; i < inputArray.length; i += batchSize) {
    batchNumber++
    batchRun = inputArray.slice(i, i + batchSize)
    .map(input => fn(input, batchNumber))
    results.push(...await Promise.all(batchRun))
    }
    return results
    }

    inputArray = []
    for (let i = 1; i < 100; i++) {
    inputArray.push(i)
    }

    batcher(inputArray, job, 7)
    .then(console.log)