function* batchGenerator(total, batchSize) {
for (let i = 0; i < total; i += batchSize) {
yield { start: i, end: Math.min(i + batchSize, total) };
}
}
const batches = batchGenerator(quantity, 100);
for (const batch of batches) {
// 生成并打印这一批标签
}
这里的 yield 是什么意思?
在这段代码中,yield 是 JavaScript 生成器函数(Generator Function)的一个关键字。它的作用是暂停生成器函数的执行,并返回一个值给调用者。让我详细解释一下:
function*声明了一个生成器函数。生成器函数可以被暂停和恢复执行。yield关键字用于暂停函数的执行,并返回一个值。每次调用生成器的next()方法时,函数会继续执行到下一个yield语句。- 在这个例子中,
yield返回一个对象{ start: i, end: Math.min(i + batchSize, total) },表示当前批次的起始和结束索引。 - 生成器函数可以通过
for...of循环进行迭代,每次迭代都会获得一个 yield 返回的值。 - 这个
batchGenerator函数的作用是将一个大的任务(总数为 total)分割成多个小批次(每批大小为batchSize)。例如,如果 total 是 250,batchSize是 100,那么它会生成三个批次:{ start: 0, end: 100 }{ start: 100, end: 200 }{ start: 200, end: 250 }
使用生成器的好处是它可以惰性计算这些批次,只有在需要时才生成下一个批次,这在处理大量数据时可以提高效率和减少内存使用。
在随后的 for 循环中,每次迭代都会处理一个批次的标签,这样可以将大量的标签生成和打印任务分解成更小、更易管理的部分。
