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 เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.


Image of Docusign

๐Ÿ› ๏ธ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

๐Ÿ‘‹ Kindness is contagious

Please leave a โค๏ธ or a friendly comment on this post if you found it helpful!

Okay