Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 1x 1x 1x 1x 1x 1x | type WorkerFunction<T> = (arg: T) => Promise<void>;
export class Chunker {
static Instantiate() {
return new Chunker();
}
async ExecuteInChunks<T>(
chunkSize: number,
dataSet: T[],
worker: WorkerFunction<T>,
) {
const chunks: T[][] = [];
for (let i = 0; i < dataSet.length; i += chunkSize) {
chunks.push(dataSet.slice(i, i + chunkSize));
}
for (const chunk of chunks) {
// NOTE: This is on purpose. We don't want to overwhelm
// the server with requests spawned, so we rate limit to `chunksize` at a time
// eslint-disable-next-line no-await-in-loop
await Promise.all(chunk.map((x) => worker(x)));
}
}
}
|