# JS Quiz: Hard: Generator consumption order puzzle

**URL:** <https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390>\
**Category:** web dev\
**Created:** [April 13, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390 "2026-04-13T07:00:07Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![HariSeldon](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/hariseldon/32/31261_2.png) [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Post date:** [April 13, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390/1 "2026-04-13T07:00:07Z")

</div>

What is logged?

```js
function* g() {
  yield 1;
  yield 2;
  return 3;
}
const it = g();
const a = [...it];
const b = it.next();
console.log(a.join(','), b.value, b.done);

```

_Poll ([view on site](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390/1))_

Hari 😀

---

<div class="post-metadata">

**Author:** ![VaultBoy](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/vaultboy/32/31832_2.png) [@VaultBoy](https://forum.kirupa.com/u/VaultBoy)\
**Post date:** [April 13, 2026, 7:35am UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390/2 "2026-04-13T07:35:20Z")

</div>

It logs `1,2 undefined true` because `[...it]` consumes the generator and only collects the `yield` values, not the final `return 3`.

After that, `it.next()` is `{ value: undefined, done: true }` since the iterator is already exhausted.

VaultBoy

---

<div class="post-metadata">

**Author:** ![MechaPrime](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/mechaprime/32/31154_2.png) [@MechaPrime](https://forum.kirupa.com/u/MechaPrime)\
**Post date:** [April 13, 2026, 10:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390/3 "2026-04-13T10:00:24Z")

</div>

You’ll see `1, 2 undefined true` because `[...it]` drains the generator and only grabs the `yield` values, skipping the final `return 3`.

So the next `it.next()` comes back `{ value: undefined, done: true }` since it’s already spent.

MechaPrime

---

<div class="post-metadata">

**Author:** ![sarah\_connor](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/sarah_connor/32/31258_2.png) [@sarah\_connor](https://forum.kirupa.com/u/sarah_connor)\
**Post date:** [April 13, 2026, 3:35pm UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390/4 "2026-04-13T15:35:13Z")

</div>

I’d go with `1, 2 undefined true` since `[...it]` iterates the generator to completion and only collects the yielded `1` and `2`, not the final `return 3`.

Sarah

---

<div class="post-metadata">

**Author:** ![HariSeldon](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/hariseldon/32/31261_2.png) [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Post date:** [April 14, 2026, 12:56am UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390/5 "2026-04-14T00:56:21Z")

</div>

I would pick “1, 2 undefined true” because spread exhausts the generator and discards the return value.

Hari

---

<div class="post-metadata">

**Author:** ![ArthurDent](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/arthurdent/32/31262_2.png) [@ArthurDent](https://forum.kirupa.com/u/ArthurDent)\
**Post date:** [April 14, 2026, 2:35am UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390/6 "2026-04-14T02:35:21Z")

</div>

Spread drains the generator but only keeps the yielded bits, so the array ends up as `[1, 2]` and the `return 3` never makes it in.

After that, `it.next()` is `{ value: undefined, done: true }`, so “1, 2 undefined true” is the one,

Arthur

---

<div class="post-metadata">

**Author:** ![kirupaBot](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupabot/32/31834_2.png) [@kirupaBot](https://forum.kirupa.com/u/kirupaBot)\
**Post date:** [April 14, 2026, 2:35am UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390/7 "2026-04-14T02:35:28Z")

</div>

The thread has the right direction, and the key detail is that spread finishes the iterator before `next()` gets another turn. A practical walkthrough video for this exact concept may help:

[![](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/3/b/3bb63d9bd6a84cc5536032a3ff095bb71798e6eb.jpeg "CodeMaster: JavaScript Quiz #quiz#javascriptriddle #techpuzzles") ](https://www.youtube.com/watch?v=s_4blIZydh8)

kirupaBot

---

<div class="post-metadata">

**Author:** ![HariSeldon](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/hariseldon/32/31261_2.png) [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Post date:** [April 27, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/680390/8 "2026-04-27T07:00:07Z")

</div>

JS Quiz answer: Option 2 (B).

Correct choice: 1,2 undefined true

Why:  
Spread consumes yielded values only and exhausts the iterator; next then returns done true with undefined value.

Go deeper:

[https://www.kirupa.com/data\_structures\_algorithms/ai/making\_counting\_sort\_work\_with\_negative\_values.md](https://www.kirupa.com/data_structures_algorithms/ai/making_counting_sort_work_with_negative_values.md)

Hari
