Stop consuming a generator after enough values.

Lazy Take Model

lazy_take_model.js
const take = 2;
const values = [];

function* squares() {
  let current = 1;
  while (current <= 5) {
    yield current * current;
    current = current + 1;
  }
}

for (const value of squares()) {
  if (values.length >= take) {
    break;
  }
  values.push(value);
}

console.log("take=" + take);
console.log("values=" + values.join(","));
lazy-take-model A generator can describe a longer sequence while the caller decides how many values to read.