DEV Community

Cover image for JavaScript EP6: Generators and Iterators๐Ÿ”Œ๐Ÿฉป
phatsss
phatsss

Posted on

JavaScript EP6: Generators and Iterators๐Ÿ”Œ๐Ÿฉป

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ ES6 เป€เบ›เบฑเบ™เบ•เบปเป‰เบ™เบกเบฒ, JavaScript เบกเบตเบชเบดเปˆเบ‡เปœเบถเปˆเบ‡เบ—เบตเปˆเป‚เบ„เบ”เบ„เบฑเบเป€เบฅเบตเบเบ™เบฑเป‰เบ™เบเปเปˆเบ„เบท generator functions เป€เบŠเบดเปˆเบ‡เบซเบผเบฒเบเป†เบ„เบปเบ™เบ—เบตเปˆเบ‚เบฝเบ™ JavaScript เบเปเปˆเบญเบฒเบ”เบˆเบฐเบกเบตเบšเบฒเบ‡เบ„เบปเบ™เบ—เบตเปˆเปƒเบŠเป‰ เปเบฅเบฐ เบชเปˆเบงเบ™เปƒเบซเบเปˆเบเปเปˆเบญเบฒเบ”เบˆเบฐเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เป€เบฅเบตเบ, เปเบ•เปˆเบ‚เปเบšเบญเบเป„เบงเป‰เบเปˆเบญเบ™เบงเปˆเบฒเบกเบฑเบ™ cool เบญเบตเปˆเบซเบผเบต เบขเบฒเบเปƒเบซเป‰เบ—เบธเบเบ„เบปเบ™เป„เบ”เป‰เบฅเบญเบ‡๐Ÿ›ธ.

เบงเปˆเบฒเปเบ•เปˆ generator functions เบกเบฑเบ™เปเบกเปˆเบ™เปเบšเป‰เบซเบเบฑเบ‡เบญเบตเบเปเบฅเป‰เบงเบงเบงเบง?๐Ÿคฃ, เบ—เบณเบญเบดเบ”เป€เบฎเบปเบฒเบกเบฒเป€เบšเบดเปˆเบ‡ function เปเบšเบšเบ—เบณเบกเบฐเบ”เบฒ เปเบฅเบฐ เปเบšเบšเป€เบ”เบตเบกเป†เบเบฑเบ™เบเปˆเบญเบ™.
normal function

เบ‚เป‰เบญเบเบฎเบนเป‰เบงเปˆเบฒเบžเบงเบเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบซเบเบฑเบ‡เบขเบนเปˆ, เปเบ•เปˆเปเบกเปˆเบ™เปเบฅเป‰เบง เบกเบฑเบ™เบเบฐเปเบ„เปˆ function เบ—เบณเบกเบฐเบ”เบฒเป†เบญเบฑเบ™เปœเบถเปˆเบ‡ เปเบฅเบฐ เบ—เบฒเบ‡เปƒเบ™ function เบกเบตเบเบฒเบ™ log เบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™ string เบญเบญเบเบกเบฒ 4 เบ•เบปเบง.
run normal function

เบšเบฒเบ‡เบ„เบปเบ™เบเปเปˆเบญเบฒเบ”เบˆเบฐเบ„เบดเบ”เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ•เป‰เบญเบ‡เบกเบฒ run code เป‚เบ‡เปˆเป†เปƒเบซเป‰เบกเบฑเบ™เป€เบชเบเป€เบงเบฅเบฒเบŠเบตเบงเบดเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฐ? เปเบ•เปˆเบเบฐเบ™เบฑเป‰เบ™เบฅเปˆเบฐ เป€เบฎเบปเบฒเบเปเปˆเป€เบซเบฑเบ™เบงเปˆเบฒ function เบกเบฑเบ™เบเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡เบกเบฑเบ™เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบปเบ™เบˆเบปเบš(เบเบปเบเป€เบงเบฑเป‰เบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบญเบตเปˆเบซเบเบฑเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡)เป‚เบ”เบเปƒเบŠเป‰ run-to-completion เป‚เบกเป€เบ”เบง, เบ›เบฐเป€เบ”เบฑเบ™เบ„เบทเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰ function เบ™เบตเป‰เบขเบธเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฒเบ‡เบ„เบฑเบ™เป„เบ”เป‰๐Ÿคฏ.

เบกเบฒเบฎเบญเบ”เบˆเบธเบ”เบ—เบตเปˆเบŸเบดเบ™เบ—เบตเปˆเบชเบธเบ”เปเบฅเป‰เบง: generator function เบˆเบฐเบšเปเปˆเป„เบ”เป‰ follow เบ•เบฒเบก run-to-completion model, เบ™เบตเป‰เปเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบขเบธเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ generator function เป„เบ”เป‰เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเบซเบงเบฒ? เปƒเบˆเป€เบขเบฑเบ™เบ™เบ™!!! เป€เบฎเบปเบฒเบกเบฒเป€เบšเบดเปˆเบ‡เบ™เบณเบเบฑเบ™เบเปˆเบญเบ™เบงเปˆเบฒ generator function เปเบกเปˆเบ™เบซเบเบฑเบ‡? เปเบฅเบฐ เป€เบฎเบปเบฒเบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบกเบฑเบ™เป„เบ”เป‰เบ”เป‰เบงเบเบงเบดเบ—เบตเปƒเบ”เปเบ”เปˆ.

เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™ generator function เป‚เบ”เบเบเบฒเบ™เบ‚เบฝเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบ”เบญเบเบˆเบฑเบ™ เบซเบผเบท เป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบ”เบฒเบง เบซเบผเบท เป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเปเบšเป‰เบญเบตเปˆเบซเบเบฑเบ‡เบˆเบฑเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเปœเป‰เบฒเบ•เบฒเปเบšเบšเบ™เบตเป‰(*) เบขเบนเปˆเบ—เบฒเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡ function keyword.
generator function

เปเบ•เปˆเบ™เบฑเป‰เบ™เบเปเปˆเบšเปเปˆเปเบกเปˆเบ™เบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ generator function เปเบฅเบฐ regular function เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบขเปˆเบฒเบ‡เบชเบดเป‰เบ™เป€เบŠเบตเบ‡:

  • เบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ generator function เบˆเบฐเบ—เบณเบเบฒเบ™ return generator object เบ—เบตเปˆเป€เบ›เบฑเบ™ iterator.
  • เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ yield keyword เปƒเบ™ generator function เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰ function เบ™เบฑเป‰เบ™เบขเบธเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบŠเบปเปˆเบงเบ„เบฒเบง.

เบงเปˆเบฒเปเบ•เปˆเบกเบฑเบ™เปเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบˆเบฑเปˆเบ‡เปƒเบ”เบฅเปˆเบฐ?๐Ÿค”.
เป€เบฎเบปเบฒเบกเบฒเป€เบฅเบตเปˆเบกเบเบฑเบ™เบ•เบฑเป‰เบ‡เปเบ•เปˆเบ—เบณเบญเบดเบ”เป€เบฅเบตเบเบ„เบท: เบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ generator function เบˆเบฐเบกเบตเบเบฒเบ™ return generator object เบญเบญเบเบกเบฒ. เปเบ•เปˆเป€เบกเบทเปˆเบญเป€เบฎเบปเบฒเบ—เบณเบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ regular function, code เบ—เบตเปˆเบขเบนเปˆเปƒเบ™ function body เบˆเบฐเบ–เบทเบ execute เปเบฅเบฐ เบ—เบณเบเบฒเบ™ return value เบญเบญเบเบกเบฒเบ›เบปเบเบเบฐเบ•เบด. เปเบ•เปˆเป€เบ–เบดเบ‡เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เป€เบกเบทเปˆเบญเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ generator function เบกเบฑเบ™เบˆเบฐ return generator object เบญเบญเบเบกเบฒ, เป€เบŠเบดเปˆเบ‡เป€เบกเบทเปˆเบญเป€เบฎเบปเบฒเบ—เบณเบเบฒเบ™ log value เบ—เบตเปˆเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบˆเบฐเบกเบตเปœเป‰เบฒเบ•เบฒเบ”เบฑเปˆเบ‡เบ™เบตเป‰:
generator object

เป€เบŠเบทเปˆเบญเบงเปˆเบฒเบซเบผเบฒเบเป†เบ„เบปเบ™เบ—เบตเปˆเบญเปˆเบฒเบ™เบกเบฒเบฎเบญเบ”เบ™เบตเป‰เบ„เบปเบ‡เบˆเบฐเบซเบผเบญเบ™เบชเบปเบกเบ„เบงเบ™เบขเบนเปˆ, เปƒเบ™เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบ•เบปเบงเบˆเบดเบ‡เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบˆเบณเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเบ•เป‰เบญเบ‡เปƒเบŠเป‰ properties เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเป€เบฎเบปเบฒเป€เบซเบฑเบ™เปƒเบ™ log. เบ”เบฝเบงเป€เบฎเบปเบฒเบกเบฒเป€เบšเบดเปˆเบ‡เบ™เบณเบเบฑเบ™เบ•เปเปˆเบงเปˆเบฒ generator object เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ™เบณเปƒเบŠเป‰เปเบ™เบงเปƒเบ”เป„เบ”เป‰เปเบ™เปˆ๐Ÿฅถ.

เบ—เบณเบญเบดเบ”เป€เบฎเบปเบฒเบˆเบฐเบเป‰เบญเบ™เบเบฑเบšเป„เบ›เบญเบตเบเปœเป‰เบญเบเปœเบถเปˆเบ‡เป€เบžเบทเปˆเบญเบ—เบตเปˆเบˆเบฐเบ•เบญเบšเบ„เบณเบ–เบฒเบกเบ—เบตเปˆเบงเปˆเบฒ: generator function เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบš regular function เปเบ™เบงเปƒเบ”?, เป€เบŠเบดเปˆเบ‡เบ„เบณเบ•เบญเบšเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบเปเปˆเบ„เบปเบ‡เบˆเบฐเปเบกเปˆเบ™: เปƒเบ™ generator function เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ yeild keyword เป€เบžเบทเปˆเบญเบขเบธเบ”เบเบฒเบ™ execution เป„เบ”เป‰.

เบ•เบปเบงเบขเปˆเบฒเบ‡: เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™ generator function เปเบšเบšเบ™เบตเป‰เป„เบ”เป‰.
genFunc
เปƒเบ™ function เบ”เป‰เบฒเบ™เป€เบ—เบดเบ‡ yield keyword เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?, เบเบฒเบ™ execution เบ‚เบญเบ‡ generator เบˆเบฐเบขเบธเบ”(pause)เบเปเปˆเบ•เปเปˆเป€เบกเบทเปˆเบญเบกเบฑเบ™เบžเบปเบš yield keyword เปเบฅเบฐ เบˆเบธเบ”เบžเบตเบเบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ generator เบ„เบทเบ•เบญเบ™เบ—เบตเปˆเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เปƒเบŠเป‰ function เบ„เบฑเป‰เบ‡เบ•เปเปˆเป„เบ›เบ„เบท เบกเบฑเบ™เบˆเบฐเบˆเบทเปˆเบงเปˆเบฒเบ„เบฑเป‰เบ‡เบซเบผเป‰เบฒเบชเบธเบ”เบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบขเบธเบ”เบกเบฑเบ™เบ–เบทเบเบขเบธเบ”เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ” เปเบฅเบฐ เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ”เบณเป€เบ™เบตเบ™เบเบฒเบ™เบ•เปเปˆเบˆเบฒเบเบˆเบธเบ”เป€เบ”เบตเบกเป„เบ›เป„เบ”เป‰เป€เบฅเบตเบ๐Ÿ˜ฑ. เบกเบฒเป€เบšเบดเปˆเบ‡เบ™เบณเบเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เบขเบนเปˆเบšเปˆเบญเบ™เบ™เบตเป‰เปเบ™เปˆ?

  1. เบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”เบ—เบตเปˆเป€เบฎเบปเบฒ run, เบกเบฑเบ™เบˆเบฐ "pauses" เปƒเบ™เปเบ–เบงเบ—เบณเบญเบดเบ” เปเบฅเบฐ yields เบ„เปˆเบฒ 'โœจ' เบ—เบตเปˆเป€เบ›เบฑเบ™ string.
  2. เป€เบกเบทเปˆเบญเป€เบฎเบปเบฒ run เบ„เบฑเป‰เบ‡เบ—เบต 2, เบกเบฑเบ™เบˆเบฐเป€เบฅเบตเปˆเบกเบˆเบฒเบเปเบ–เบงเบ—เบตเปˆเบกเบฑเบ™เบขเบธเบ”เป€เบ—เบทเปˆเบญเบเปˆเบญเบ™เบ„เบท yield keyword เบญเบฑเบ™เบ—เบณเบญเบดเบ”. เบกเบฑเบ™เบˆเบฐ run เป„เบ›เป€เบฅเบทเป‰เบญเบเป†เบˆเบปเบ™เบฎเบญเบ” yield keyword เบ—เบต 2 เปเบฅเบฐ yields เบ„เปˆเบฒ '๐Ÿ’•' เบ—เบตเปˆเป€เบ›เบฑเบ™ string.
  3. เป€เบกเบทเปˆเบญเป€เบฎเบปเบฒ run เบ„เบฑเป‰เบ‡เบ—เบต 3,โ€‹ เบกเบฑเบ™เบˆเบฐเป€เบฅเบตเปˆเบกเบˆเบฒเบเปเบ–เบงเบ—เบตเปˆเบกเบฑเบ™เบขเบธเบ”เป„เบงเป‰เบˆเบฒเบเป€เบ—เบทเปˆเบญเบเปˆเบญเบ™ เบซเบผเบท เบˆเบฒเบ yield keyword เบ—เบต 2. เป€เบŠเบดเปˆเบ‡เบกเบฑเบ™เบเปเปˆเบˆเบฐเป€เบฎเบฑเบ”เบ„เบทเป€เบเบปเปˆเบฒเบเปเปˆเบ„เบทเบกเบฑเบ™เบˆเบฐ run เป„เบ›เป€เบฅเบทเป‰เบญเบเป†เบˆเบปเบ™เบฎเบญเบ” return keyword(เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบšเปเปˆเบกเบต yield keyword เบญเบทเปˆเบ™เปเบฅเป‰เบง) เปเบฅเบฐ เบกเบฑเบ™เบˆเบฐเบ—เบณเบเบฒเบ™ return เบ„เปˆเบฒ Done! เบญเบญเบเป„เบ›.

เบงเปˆเบฒเปเบ•เปˆเป€เบฎเบปเบฒเบˆเบฐเป€เบญเบตเป‰เบ™เปƒเบŠเป‰ generator function เป„เบ”เป‰เปเบ™เบงเปƒเบ”เบ—เบฑเบ‡เป†เบ—เบตเปˆเป€เบฎเบปเบฒเบเปเปˆเป€เบซเบฑเบ™เปเบฅเป‰เบงเบงเปˆเบฒเบเบฒเบ™เบ—เบตเปˆเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เปƒเบŠเป‰ generator function เบกเบฑเบ™เบˆเบฐ return generator object เบญเบญเบเบกเบฒ?๐Ÿค” เบšเปˆเบญเบ™เบ™เบตเป‰เปเบซเบผเบฐเบ—เบตเปˆเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰ generator object เบญเบญเบเบกเบฒเบซเบผเบดเป‰เบ™(เบšเบญเบเป„เบ”เป‰เป€เบฅเบตเบเบงเปˆเบฒเบšเบฑเบ™เป€เบ—เบตเบ‡เบเบฑเบ™เบ—เบปเปˆเบงเปœเป‰เบฒ๐Ÿคฃ).

เปƒเบ™ generator object เบˆเบฐเบกเบต next method เบกเบฒเปƒเบซเป‰เบ™เบณ(เบขเบนเปˆเปƒเบ™ prototype chain). เป€เบŠเบดเปˆเบ‡ method เบ™เบตเป‰เป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™ iterate generator object, เปเบ•เปˆเปƒเบ™เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบˆเบทเปˆ state เบ‚เบญเบ‡เบˆเบธเบ”เบ—เบตเปˆเบกเบฑเบ™เบขเบธเบ”เบเปˆเบญเบ™เปœเป‰เบฒเบ™เบตเป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบกเบฑเบ™ yield value, เป€เบฎเบปเบฒเบ•เป‰เบญเบ‡ assign generator object เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ variable เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบฎเบปเบฒเปƒเบŠเป‰เบŠเบทเปˆเบงเปˆเบฒ genObj เบซเบเปเป‰เบกเบฒเบˆเบฒเบ generatorObject.
generatorObject

เป€เบฎเบปเบฒเบกเบฒเป€เบšเบดเปˆเบ‡เบเบฑเบ™เบ•เปเปˆเบญเบตเบเบงเปˆเบฒเบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เบ–เป‰เบฒเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบ—เบตเปˆเบขเบนเปˆเปƒเบ™ genObj generator object.
genObj generator object

generator เบˆเบฐเบ—เบณเบเบฒเบ™ run เบˆเบปเบ™เบเบงเปˆเบฒเบˆเบฐเบžเบปเบšเบเบฑเบš yield keyword เบ—เบณเบญเบดเบ”, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบกเบฑเบ™เบˆเบฐเบขเบนเปˆเปเบ–เบงเบ—เบณเบญเบดเบ” เบกเบฑเบ™เป„เบ”เป‰เบ—เบณเบเบฒเบ™ yield object เบ—เบตเปˆเบกเบต value property เปเบฅเบฐ done property.

{ value: ... , done: ... }

  • value property เบˆเบฐเป€เบ›เบฑเบ™ value เบ—เบตเปˆเป€เบฎเบปเบฒเป„เบ”เป‰เบ—เบณเบเบฒเบ™ yield เป„เบงเป‰.
  • done property เป€เบ›เบฑเบ™เบ„เปˆเบฒ boolean, เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ„เปˆเบฒ true เบเปเปˆเบ•เปเปˆเป€เบกเบทเปˆเบญ generator function เป„เบ”เป‰เบ—เบณเบเบฒเบ™ return value เบญเบญเบเป„เบ›เปเบฅเป‰เบง(เบšเปเปˆเปเบกเปˆเบ™ yield)

เป€เบฎเบปเบฒเป„เบ”เป‰เบ—เบณเบเบฒเบ™เบขเบธเบ”เบเบฒเบ™ iterate เปƒเบ™ generator เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบเบฑเบšเบงเปˆเบฒ function เบกเบฑเบ™เบ–เบทเบ paused, เบšเบญเบเป€เบฅเบตเบเบงเปˆเบฒเบชเบธเบ”เบˆเบฑเบเบ›เบฐเบฅเบฑเบเบ‚เบดเบเป€เบฅเบตเบ. เบ”เบฝเบงเป€เบฎเบปเบฒเบกเบฒเบฅเบญเบ‡เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบญเบตเบเบฎเบญเบšเบฅเบญเบ‡เป€เบšเบดเปˆเบ‡.
call next method

เบ—เบณเบญเบดเบ”เป€เบฎเบปเบฒเป„เบ”เป‰เบ—เบณเบเบฒเบ™ log เบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™ string เบญเบญเบเบกเบฒเป€เบšเบดเปˆเบ‡เบˆเบฐเป„เบ”เป‰ First log! เบขเบนเปˆเปƒเบ™ console.log(), เปเบ•เปˆเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™ yield เบซเบผเบท return keyword เบกเบฑเบ™เบˆเบถเปˆเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบ•เปเปˆเบˆเบปเบ™เบเบงเปˆเบฒเบˆเบฐเบžเบปเบš yield keyword เบ—เบตเปˆเป„เบ”เป‰เบ„เปˆเบฒ '๐Ÿ’•'. object เบ—เบตเปˆเป„เบ”เป‰เบˆเบฒเบเบเบฒเบ™ yield เป‚เบ”เบ value property เบˆเบฐเป„เบ”เป‰ '๐Ÿ’•' เปเบฅเบฐ done property, เป€เบŠเบดเปˆเบ‡ done property เบˆเบฐเบเบฑเบ‡เป€เบ›เบฑเบ™เบ„เปˆเบฒ false เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ generator เบเบฑเบ‡เบšเปเปˆเบกเบตเบเบฒเบ™ return เป€เบ—เบทเปˆเบญ.

เป€เบฎเบปเบฒเบกเบฒเบฅเบญเบ‡เปƒเบŠเป‰ next method เบญเบตเบเบฎเบญเบš, เปœเป‰เบฒเบˆเบฐเป€เบ›เบฑเบ™เบฎเบญเบšเบชเบธเบ”เบ—เป‰เบฒเบเปเบฅเป‰เบงเบกเบฑเป‰เบ‡๐Ÿคฃ
last next method

เป€เบฎเบปเบฒเป„เบ”เป‰เบ—เบณเบเบฒเบ™ log เบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™ string เบˆเบฐเป„เบ”เป‰ Second log! เบขเบนเปˆเปƒเบ™ console.log() เบ„เบทเป€เบเบปเปˆเบฒ, เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเบžเบปเบš return keyword เบžเป‰เบญเบกเบ”เป‰เบงเบเบ„เปˆเบฒ 'Done!'. object เบ—เบตเปˆเบ–เบทเบ return เบญเบญเบเบกเบฒเบˆเบฐเป„เบ”เป‰ value property เปเบกเปˆเบ™ 'Done!', เบกเบฒเบฎเบญเบ”เบ•เบญเบ™เบ™เบตเป‰เป€เบฎเบปเบฒเป„เบ”เป‰เบ—เบณเบเบฒเบ™ return เบ„เปˆเบฒเบญเบญเบเป„เบ›เปเบฅเป‰เบง เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ value เบ‚เบญเบ‡ done property เบˆเบฐเบกเบตเบ„เปˆเบฒเป€เบ›เบฑเบ™ true.

done property เบ–เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบญเบตเบเบชเปˆเบงเบ™เบ—เบตเปˆเบชเบณเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เป€เบฅเบตเบเบเปเปˆเบงเปˆเบฒเป„เบ”เป‰, เป€เบŠเบดเปˆเบ‡เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ” iterate generator object เป„เบ”เป‰เบžเบฝเบ‡เบ„เบฑเป‰เบ‡เบ”เบฝเบงเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เปเบฅเป‰เบงเบ–เป‰เบฒเบชเบปเบกเบกเบธเบ”เป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบญเบตเบเบฎเบญเบšเบกเบฑเบ™เบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™?
return from generator function
เบ„เบณเบ•เบญเบšเบเปเปˆเบ‡เปˆเบฒเบเป†เป€เบฅเบตเบเบ„เบทเบกเบฑเบ™เบˆเบฐเบ—เบณเบเบฒเบ™ return เบ„เปˆเบฒ undefined เบญเบญเบเบกเบฒเบ—เบธเบเบ„เบฑเป‰เบ‡, เปเบ•เปˆเบ–เป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบขเบฒเบเบˆเบฐ iterate เบญเบตเบเบเปเปˆเบžเบฝเบ‡เบชเป‰เบฒเบ‡ generator object เปƒเปเปˆ.


เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เบ”เป‰เบฒเบ™เป€เบ—เบดเบ‡เปเบฅเป‰เบงเบงเปˆเบฒ generator function เบˆเบฐเบ—เบณเบเบฒเบ™ return iterator(generator object), เปเบ•เปˆ iterator เปเบกเปˆเบ™เบซเบเบฑเบ‡เบญเบตเบเปเบฅเป‰เบงเบšเบฒเบ”เบ™เบด? เป€เบญเบปเบฒเบ„เบณเบ•เบญเบšเป„เบงเป‰เบเปˆเบญเบ™เปเบฅเป‰เบงเบ„เปˆเบญเบเป„เบ›เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบณเบเบฑเบ™เบ”เป‰เบฒเบ™เบฅเบธเปˆเบก. iterator เปเบฒเบเป€เบ–เบดเบ‡ object เบ—เบตเปˆเบ–เบทเบ return เบญเบญเบเบกเบฒ เปเบฅเบฐ เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ for of loops เปเบฅเบฐ spread operator เบเบฑเบš object เบ™เบฑเป‰เบ™เป†เป„เบ”เป‰.

เป€เบฎเบปเบฒเบฅเบญเบ‡ spread เบ„เปˆเบฒเบ—เบตเปˆเบ–เบทเบ yield เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ array เป‚เบ”เบเบ™เบณเปƒเบŠเป‰ [... ] syntax.
spread operator

เบซเบผเบท เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰ for of loop
for of
เบซเบผเบท เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰เบงเบดเบ—เบตเบญเบทเปˆเบ™เบเปเปˆเป„เบ”เป‰เป€เบŠเบฑเปˆเบ™เบเบฑเบ™.

เปเบ•เปˆเบงเปˆเบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰ iterator เป€เบ›เบฑเบ™ iterator?๐Ÿ˜ณ เบ„เบณเบ•เบญเบšเบ‡เปˆเบฒเบเบเปเปˆเบเป‰เบญเบ™เบงเปˆเบฒเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ for-of loops เปเบฅเบฐ spread syntax เบเบฑเบš arrays, strings, maps เปเบฅเบฐ sets เป„เบ”เป‰เบ™เบฑเป‰เบ™เป€เบญเบ‡, เบชเปˆเบงเบ™เบญเบตเบเป€เบซเบ”เบœเบปเบ™เบเปเปˆเบเป‰เบญเบ™เบกเบฑเบ™เบกเบตเบเบฒเบ™ implement เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ iterator protocol: [Symbol.iterator]. เบ–เป‰เบฒเบเบฑเบ‡เบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆ เป€เบฎเบปเบฒเบกเบฒเป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบณเบเบฑเบ™เบ”เบตเบเบงเปˆเบฒ.
iterator protocol
เบšเบฑเบ™เบ”เบฒ array,string เปเบฅเบฐ generatorObject เบฅเป‰เบงเบ™เปเบฅเป‰เบงเปเบ•เปˆเป€เบ›เบฑเบ™ iterators. เป€เบฎเบปเบฒเบฅเบญเบ‡เบกเบฒเป€เบšเบดเปˆเบ‡ value เบ‚เบญเบ‡เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒ [Symbol.iterator] property.
Symbol.iterator
เปเบ•เปˆ value เบ‚เบญเบ‡ [Symbol.iterator] เบ—เบตเปˆเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบ™เบฑเป‰เบ™เบšเปเปˆเบชเบฒเบกเบฒเบ” iterate เป„เบ”เป‰เบšเปเปˆ? เป€เบžเบทเปˆเบญเบ•เบญเบšเบ„เบณเบ–เบฒเบกเบ™เบตเป‰เป€เบฎเบปเบฒเป„เบ›เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบณเบเบฑเบ™เป€เบฅเบตเบ.
value of iterator
เบ„เบณเบ•เบญเบšเบ—เบณเบญเบดเบ”เบ„เบท: เปเบกเปˆเบ™เปเบฅเป‰เบง๐Ÿ˜„, เปเบ•เปˆเปƒเบˆเป€เบขเบฑเบ™เบเปˆเบญเบ™เป„เบญเป‰เบชเบญเบ‡เบขเปˆเบฒเบŸเป‰เบฒเบงเป€เบชเบเปƒเบˆเป„เบ› เบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™เปเบ„เปˆเบšเปเปˆเป„เบ”เป‰เบขเบนเปˆเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™เบŠเบทเปˆเป†๐Ÿคฃ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบขเบฒเบเป„เบ”เป‰ value เบญเบญเบเบกเบฒเป€เบฎเบปเบฒเบเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบ—เบณเบเบฒเบ™ add [Symbol.iterator] property เป€เบ‚เบปเป‰เบฒเป„เบ›เปเบšเบš manual เปเบฅเบฐ เป€เบฎเบปเบฒเบˆเบฐเบชเบฒเบกเบฒเบ” iterate เป„เบ”เป‰เบ™เบฑเป‰เบ™เป€เบญเบ‡.

[Symbol.iterator] เบกเบตเบเบฒเบ™ return iterator เบญเบญเบเบกเบฒ, เป€เบŠเบดเปˆเบ‡เบกเบฑเบ™เบˆเบฐเบžเปˆเบงเบ‡ next method เบ—เบตเปˆเบˆเบฐ return object เบญเบญเบเบกเบฒเบ„เป‰เบฒเบเป†เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบœเปˆเบฒเบ™เบกเบฒ: { value: '...', done: false/true }.

เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบ‡เปˆเบฒเบ, เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ” set value เบ‚เบญเบ‡ [Symbol.iterator] เปƒเบซเป‰เป€เบ—เบปเปˆเบฒเบเบฑเบš generator function เป€เบŠเบดเปˆเบ‡เบกเบฑเบ™เบˆเบฐ return iterator เบญเบญเบเบกเบฒเป‚เบ”เบ default เบขเบนเปˆเปเบฅเป‰เบง, เบฅเบญเบ‡เบชเป‰เบฒเบ‡ object เบ—เบตเปˆเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ” iterate เป„เบ”เป‰ เปเบฅเบฐ เบ—เบณเบเบฒเบ™ yield value เบ‚เบญเบ‡ object เบ—เบฑเบ‡เปเบปเบ”.
Symbol.iterator equal generator function
เบชเบฑเบ‡เป€เบเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เบ–เป‰เบฒเบซเบฒเบเป€เบฎเบปเบฒเปƒเบŠเป‰ spread syntax เบซเบผเบท for-of loop เบเบฑเบš object เบ—เบตเปˆเป€เบฎเบปเบฒเป„เบ”เป‰เบกเบฒ
using spread syntax with iterator
เบซเบผเบทเป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆ object keys, เบ–เป‰เบฒเปเบšเบšเบ™เบตเป‰เบเปเปˆเบ‡เปˆเบฒเบเป†เป€เบฅเบตเบ เป€เบฎเบปเบฒเบžเบฝเบ‡เบ—เบณเบเบฒเบ™ yield Object.keys(this) เปเบ—เบ™ this
Object.keys(this)
เบกเบฒเป€เบšเบดเปˆเบ‡เบœเบปเบ™เบฅเบฑเบšเบ™เบณเบเบฑเบ™
res of Object.keys(this)

Object.keys(this) เป€เบ›เบฑเบ™ array, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ value เบ—เบตเปˆเบ–เบทเบ yield เบˆเบฐเป„เบ”เป‰เป€เบ›เบฑเบ™ array เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบฎเบปเบฒเบˆเบฐ spread array เบ—เบตเปˆเป€เบฎเบปเบฒเป„เบ”เป‰เบกเบฒเป„เบ›เป€เบ›เบฑเบ™ array เบญเบทเปˆเบ™เป† เบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเปเปˆเบ„เบทเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰ nested array เบกเบฒเปเบ—เบ™. เป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบ•เป‰เบญเบ‡เบเบฒเบ™ array เปเบšเบšเบ™เบตเป‰, เป€เบฎเบปเบฒเบžเบฝเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™ yield เปเบ•เปˆเบฅเบฐ key เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ” yield value เบˆเบฒเบ iterator เบขเบนเปˆเปƒเบ™ generator เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰ yield* keyword, เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเป€เบฎเบปเบฒเบกเบต generator function เบ—เบตเปˆ yield เบ—เบณเบญเบดเบ”เบˆเบฐ yield "๐Ÿฅ‘" เบ•เปเปˆเบกเบฒเป€เบฎเบปเบฒเบกเบตเบเบฒเบ™ yield values เบกเบฒเบˆเบฒเบ iterator(เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เป€เบ›เบฑเบ™ array) เป€เบŠเบดเปˆเบ‡เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เป€เบฎเบปเบฒเป„เบ”เป‰เปƒเบŠเป‰ yield* keyword, เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบฎเบปเบฒเป„เบ”เป‰เบ—เบณเบเบฒเบ™เปเบ—เบ™เบ„เปˆเบฒเบ”เป‰เบงเบ generator เบญเบทเปˆเบ™.
yield*
เปเบ•เปˆเบฅเบฐ value เบ‚เบญเบ‡ generator เบ—เบตเปˆเป„เบ”เป‰เปเบ—เบ™เบ„เปˆเบฒเบˆเบฐเบ–เบทเบ yield เบเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบˆเบฐเบ—เบณเบเบฒเบ™ iterate genObj iterator เบ•เปเปˆเป„เบ›.

เบ™เบตเป‰เบ„เบทเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ object keys เบ—เบฑเบ‡เปเบปเบ”
object keys


เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ™เบณเปƒเบŠเป‰ generator function เบญเบตเบเปเบšเบšเปœเบถเปˆเบ‡เบเปเปˆเบ„เบท: เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบ›เบฑเบ™ observer functions เป„เบ”เป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ generator เบชเบฒเบกเบฒเบ”เบฅเปเบ–เป‰เบฒ incoming data เปเบฅเบฐ เป€เบกเบทเปˆเบญเบกเบต data เบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเบกเบฒเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบถเปˆเบ‡เบˆเบฐเบ—เบณเบเบฒเบ™ process. เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ”เป‰เบฒเบ™เบฅเบธเปˆเบก๐Ÿง
generator as a observer functions
เบชเบดเปˆเบ‡เปœเบถเปˆเบ‡เบ—เบตเปˆเบ•เปˆเบฒเบ‡เบเบฑเบ™เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เป€เบฅเบตเบเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบกเบตเบžเบฝเบ‡ yield [value] เบ„เบทเบเบฑเบšเบ—เบตเปˆเป€เบฎเบปเบฒเป€เบซเบฑเบ™เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เปเบ•เปˆเป€เบฎเบปเบฒเป„เบ”เป‰ assign เบ„เปˆเบฒเป„เบงเป‰เปƒเบ™เบ•เบปเบงเบ›เปˆเบฝเบ™เบ—เบตเปˆเบŠเบทเปˆเบงเปˆเบฒ second เปเบฅเบฐ เบกเบตเบเบฒเบ™ yield value เบ—เบตเปˆเป€เบ›เบฑเบ™ string เป€เบŠเบดเปˆเบ‡เบกเบตเบ„เปˆเบฒ First!, เป€เบŠเบดเปˆเบ‡ value เบ™เบตเป‰เป€เบญเบ‡เบˆเบฐเบ–เบทเบ yield เปƒเบ™เบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”เบ—เบตเปˆเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method.

เบกเบฒเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เป€เบกเบทเปˆเบญเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”.
yield value & assign to const keyword
เป€เบกเบทเปˆเบญเบกเบฑเบ™เบžเปเป‰ yield เปƒเบ™เปเบ–เบงเบ—เบณเบญเบดเบ” เปเบฅเบฐ เบกเบฑเบ™เป„เบ”เป‰เบ—เบณเบเบฒเบ™ yield value First!, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ value เบ‚เบญเบ‡เบ•เบปเบงเบ›เปˆเบฝเบ™ second เบˆเบฐเบกเบตเบ„เปˆเบฒเปเบ™เบงเปƒเบ”?

เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™ value เบ—เบตเปˆเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เป„เบ›เปƒเบ™ next method เบ—เบตเปˆเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เปƒเบŠเป‰เปƒเบ™เบ„เบฑเป‰เบ‡เบ•เปเปˆเป„เบ›, เป€เบฎเบปเบฒเบกเบฒเบฅเบญเบ‡เบชเบปเปˆเบ‡ value เบ—เบตเปˆเป€เบ›เบฑเบ™ string เบ”เบฑเปˆเบ‡เบ™เบตเป‰ 'I like JavaScript' เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ next method.
pass value to next method
เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเบณเบ„เบฑเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบชเบฑเบ‡เป€เบเบ”เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ„เบท: เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบกเบตเบเบฒเบ™ track input เปƒเบ”เป†เป€เบ—เบทเปˆเบญ เป€เบฎเบปเบฒเบžเบฝเบ‡ start observer เป‚เบ”เบเบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰เปƒเบ™เบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”. generator เบˆเบฐเบฅเปเบ–เป‰เบฒ input เบˆเบฒเบเป€เบฎเบปเบฒเบเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบˆเบฐเบชเบทเบšเบ•เปเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบกเบฑเบ™เบ•เปเปˆเป„เบ› เปเบฅเบฐ เบญเบฒเบ”เบˆเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ„เปˆเบฒเบ—เบตเปˆเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เป„เบ›เปƒเบ™ next method.


เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบ•เป‰เบญเบ‡เปƒเบŠเป‰ generator function?

เบ‚เปเป‰เบ”เบตเบขเปˆเบฒเบ‡เปœเบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ generator เบ„เบทเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™ lazily evaluated, เปเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ value เบ—เบตเปˆเบ–เบทเบ return เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบˆเบฐเบ–เบทเบ compute เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเป€เบฎเบปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™(เบ›เบฐเบกเบฒเบ™เบงเปˆเบฒเบชเบฑเปˆเบ‡เปƒเบซเป‰เป€เบฎเบฑเบ”เบˆเบถเปˆเบ‡เป€เบฎเบฑเบ”๐Ÿซก). fucntion เบ›เบปเบเบเบฐเบ•เบดเบˆเบฐเบšเปเปˆเบกเบตเปเบšเบšเบ™เบตเป‰ - value เบ—เบฑเบ‡เปเบปเบ”เบˆเบฐเบ–เบทเบ generate เปƒเบซเป‰เป€เบฎเบปเบฒเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเป€เบฎเบปเบฒเบˆเบณเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เปƒเบ™เบญเบฒเบ™เบฒเบ„เบปเบ”.
lazily evaluated
เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบกเบฑเบ™เบเปเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบเบฑเบš use cases เบญเบทเปˆเบ™เป†, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เป€เบฎเบปเบฒเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบˆเบฐเบชเบฒเบกเบฒเบ” control เบเบฒเบ™ iterate datasets เบ—เบตเปˆเปƒเบซเบเปˆเป†เป„เบ”เป‰.

เบฅเบญเบ‡เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเป€เบฎเบปเบฒเบกเบต list เบ‚เบญเบ‡ book clubs๐Ÿ“š, เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เป€เบฎเบปเบฒเบ‡เปˆเบฒเบ เปเบฅเบฐ เบชเบฑเป‰เบ™เป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบกเบต data เบ”เบฑเปˆเบ‡เบ™เบตเป‰: เปเบ•เปˆเบฅเบฐ book clubs เบˆเบฐเบกเบต member เบžเบฝเบ‡ 1 เบ„เบปเบ™ เปเบฅเบฐ เบญเปˆเบฒเบ™เบ›เบทเป‰เบกเบซเบผเบฒเบเบซเบปเบงเบ—เบตเปˆเบชเบฐเปเบ”เบ‡เปƒเบ™ books array.
books array
เบ•เบญเบ™เบ™เบตเป‰เป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบซเบฒ book เบ—เบตเปˆเบกเบต id เป€เบ—เบปเปˆเบฒเบเบฑเบš ey812, เปƒเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰ nested for-loop เบซเบผเบท forEach helper, เปเบ•เปˆเบ™เบฑเป‰เบ™เบเปเปˆเปเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป€เบฎเบปเบฒเบเบฑเบ‡เบ„เบปเบ‡เบชเบฒเบกเบฒเบ” iterate data เป„เบ”เป‰เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป€เบฎเบปเบฒเบˆเบฐเบžเบปเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเป‰เบงเบเปเปˆเบ•เบฒเบก.
เบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เบฑเบเบเปˆเบฝเบงเบเบฑเบš generator เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ„เบท: เบกเบฑเบ™เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ›เป€เบฅเบทเป‰เบญเบเป†เบˆเบปเบ™เบเบงเปˆเบฒเป€เบฎเบปเบฒเบˆเบฐเบšเบญเบเปƒเบซเป‰เบกเบฑเบ™เป€เบฎเบฑเบ”-เปเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ›เบฐเป€เบกเบตเบ™ item เบ—เบตเปˆเบ–เบทเบ return เบญเบญเบเบกเบฒเป„เบ”เป‰ เปเบฅเบฐ เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™ item เบ—เบตเปˆเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ เป€เบฎเบปเบฒเบเปเปˆเบšเปเปˆเบˆเบณเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเบ•เป‰เบญเบ‡เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method. เป€เบฎเบปเบฒเบฅเบญเบ‡เบกเบฒเป€เบšเบดเปˆเบ‡เบ™เบณเบเบฑเบ™เบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”.

เบ—เบณเบญเบดเบ”เป€เบฎเบปเบฒเบˆเบฐเบ—เบณเบเบฒเบ™เบชเป‰เบฒเบ‡ generator เบ—เบตเปˆเบกเบตเบเบฒเบ™ iterate books array เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐ team member, เป€เบฎเบปเบฒเบˆเบฐเบชเบปเปˆเบ‡เบ„เปˆเบฒ books array เบ‚เบญเบ‡ team member เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ function เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบฐเบกเบตเบเบฒเบ™ iterate array เปเบฅเบฐ เบ—เบณเบเบฒเบ™ yield เปเบ•เปˆเบฅเบฐ book
pass books array to generator
เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเป€เบฎเบปเบฒเป„เบ”เป‰ generator เบ”เป‰เบฒเบ™เป€เบ—เบดเบ‡เบกเบฒเปเบฅเป‰เบง, เบ•เปเปˆเป„เบ›เป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบชเป‰เบฒเบ‡เบญเบตเบ generator เบ—เบตเปˆ iterate clubMembers array. เป€เบŠเบดเปˆเบ‡เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰เป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเบปเบ™เปƒเบˆเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡ member เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐ iterate เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡ books เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบขเบนเปˆเปƒเบ™ iterateMembers generator เป€เบฎเบปเบฒเป„เบ”เป‰เบ—เบณเบเบฒเบ™ yield iterateBooks เป‚เบ”เบเบเบฒเบ™เบชเบปเปˆเบ‡ books เบ‚เบญเบ‡ member เป€เบ‚เบปเป‰เบฒเป„เบ›.
yield iterateBooks
เบกเบฒเบฎเบญเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบชเบธเบ”เบ—เป‰เบฒเบเป€เบฎเบปเบฒเบˆเบฐเบ—เบณเบเบฒเบ™ iterate bookclubs, เป€เบŠเบดเปˆเบ‡เบกเบฑเบ™เบเปเปˆเบ„เบทเบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ เป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเบปเบ™เปƒเบˆเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡ bookclubs, เปเบ•เปˆเป€เบฎเบปเบฒเบชเบปเบ™เปƒเบˆเบžเบฝเบ‡ club members(เบชเบฐเป€เบžเบฒเบฐ books เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐ member). เป€เบฎเบปเบฒเบˆเบฐเบ—เบณเบเบฒเบ™ yield iterateMembers เปเบฅเบฐ เบ—เบณเบเบฒเบ™เบชเบปเปˆเบ‡ clubMembers array เป€เบ‚เบปเป‰เบฒเป„เบ›.
pass club member to iterateMembers
เป€เบžเบทเปˆเบญเบ—เบตเปˆเบˆเบฐ iterate เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบ‚เบฝเบ™เบกเบฒ, เป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ generator object เบ—เบตเปˆ iterable เป‚เบ”เบเบเบฒเบ™เบชเบปเปˆเบ‡ bookClub array เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ iterateBookClubs generator, เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบฎเบปเบฒเบˆเบฐเบ—เบณเบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰เป‚เบ”เบเบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบ›เปˆเบฝเบ™ it เบ‚เบถเป‰เบ™เบกเบฒเป€เบžเบทเปˆเบญเป€เบ›เบฑเบ™ iterator.
generator object
เบซเบผเบฑเบ‡เบˆเบฒเบเบœเปˆเบฒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบธเบเบขเปˆเบฒเบ‡เบกเบฒเปเบฅเป‰เบงเป€เบฎเบปเบฒเบˆเบฐเบ—เบณเบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบˆเบปเบ™เบเบงเปˆเบฒเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡ book เป‚เบ”เบเบ—เบตเปˆ id เบ‚เบญเบ‡ book เบ•เป‰เบญเบ‡เป€เบ—เบปเปˆเบฒเบเบฑเบš ey812.
call next method for book id ey812
เบ•เบญเบ™เบ™เบตเป‰เป€เบฎเบปเบฒเบšเปเปˆเบˆเบณเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ iterate data เบ—เบฑเบ‡เปเบปเบ”เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡ book, เปเบ•เปˆเป€เบฎเบปเบฒเบžเบฝเบ‡เบซเบฒเบ‚เปเป‰เบกเบนเบ™เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบ—เบ™. เบชเปˆเบงเบ™เบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบ”เป‰เบงเบเบ•เบปเบงเป€เบญเบ‡เบ™เบฑเป‰เบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเบ‚เบฑเบ”เบซเบนเบ‚เบฑเบ”เบ•เบฒเป„เบ›เปเบ™เปˆ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบ•เป‰เบญเบ‡เป„เบ”เป‰เบชเป‰เบฒเบ‡ function เปƒเบ™เบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบˆเบปเบ™เบเบงเปˆเบฒเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบ‚เปเป‰เบกเบนเบ™เบ•เบฒเบกเบ—เบตเปˆเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™.
เป€เบฎเบปเบฒเบˆเบฐเบ—เบณเบเบฒเบ™เบชเบปเปˆเบ‡ id เบ‚เบญเบ‡ book เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ findBook function เป€เบžเบทเปˆเบญเบ—เบณเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ book เบ•เบฒเบก id เบ—เบตเปˆเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›, เบ–เป‰เบฒเบžเบปเบšเบงเปˆเบฒ id(เบ—เบตเปˆเบชเบปเปˆเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›) เปเบฅเบฐ value.id เบ•เบปเบ‡เบเบฑเบ™เบกเบฑเบ™เบเปเปˆเบˆเบฐเบ—เบณเบเบฒเบ™เป‚เบเบ™ value เบญเบญเบเบกเบฒ, เปเบ•เปˆเบ–เป‰เบฒเบ—เบฑเบ‡ 2 id เบšเปเปˆเบ•เบปเบ‡เบเบฑเบ™เบกเบฑเบ™เบเปเปˆเบˆเบฐเบ—เบณเบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เบญเบตเบเบ„เบฑเป‰เบ‡เปเบ—เบ™.
findBook function
res of findBook function
เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบเบปเบเบกเบฒเบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปœเป‰เบญเบ, เปเบ•เปˆเบฅเบญเบ‡เบ„เบดเบ”เบžเบฒเบšเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเป€เบฎเบปเบฒเบกเบต data เบ—เบตเปˆเบซเบผเบฒเบเปเบฎเบ‡ เบซเบผเบท เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบ stream เป€เบ‚เบปเป‰เบฒเบกเบฒเปเบฅเป‰เบงเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเปเบ›เบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™ เบซเบผเบท เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบฒเบ‚เปเป‰เบกเบนเบ™เบžเบฝเบ‡เบขเปˆเบฒเบ‡เบ”เบฝเบงเบˆเบฒเบ datasets เปƒเบซเบเปˆเป†. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบ–เป‰เบฒเปƒเบซเป‰ dataset เบ‚เบญเบ‡เป€เบฎเบปเบฒเบžเป‰เบญเบกเบเปˆเบญเบ™เป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบˆเบฐเป€เบฅเบตเปˆเบกเบเบฒเบ™เปเบ›เบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เป„เบ”เป‰. เปเบ•เปˆเบ–เป‰เบฒเปƒเบŠเป‰ generator function เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ‚เปเบ‚เปเป‰เบกเบนเบ™เบžเบฝเบ‡เปœเป‰เบญเบเบ”เบฝเบง, เบเบงเบ”เบชเบญเบšเบ‚เปเป‰เบกเบนเบ™ เปเบฅเบฐ value เบˆเบฐเบ–เบทเบ generate เบเปเปˆเบ•เปเปˆเป€เบกเบทเปˆเบญเป€เบฎเบปเบฒเบ—เบณเบเบฒเบ™เป€เบญเบตเป‰เบ™เปƒเบŠเป‰ next method เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.


Top comments (0)