asyncChunkIterableBySize
JavaScript
// Yields fixed-size arrays from any iterable, sync or async.
export async function* chunkIterable(iterable, size) {
if (!Number.isInteger(size) || size < 1) {
throw new RangeError('size must be a positive integer');
}
const iterator = iterable?.[Symbol.asyncIterator]
? iterable[Symbol.asyncIterator]()
: iterable[Symbol.iterator]();
let batch = [];
for (;;) {
const { value, done } = await iterator.next();
if (done) {
if (batch.length > 0) yield batch;
return;
}
batch.push(value);
if (batch.length === size) {
yield batch;
batch = [];
}
}
}