function* controller (end) {
  while (end !== (yield)) {}
}

const end = Symbol()
const it = controller(end)

console.log(it.next()) // { value: undefined, done: false }
console.log(it.next(end)) // { value: undefined, done: true } -> aborted