Experiment with generators, yield and cycling

by Arnaud Buchholz

JavaScript

function * values () {
}

function * loopOnIterator (iterator) {
  while (true) {
    const { value, done } = iterator.next()
    console.log(value)
    if (done) {
      break
    } else {
      yield
    }
  }
}

function * eval (iterator) {
  yield * loopOnIterator(iterator)
}

function cycle (iterator) {
  if (iterator !== undefined) {
    let count = 0
    let { done } = iterator.next()
    while (done === false) {
      ++count
      done = iterator.next().done
    }
    return count
  }
  return 1
}

console.log(cycle(eval(values())))