Join egghead, unlock knowledge.

Want more egghead?

This lesson is for members. Join us? Get access to all 3,000+ tutorials + a community with expert developers around the world.

Unlock This Lesson
Become a member
to unlock all features

Level Up!

Access all courses & lessons on egghead today and lock-in your price for life.


    Use JavaScript (ES6) generators to pause function execution


    ES6 generators make it possible to pause and resume function execution at arbitrary points. This video will introduce you to the basics of generators with the yield keyword.



    Become a Member to view code

    You must be a Pro Member to view code

    Access all courses and lessons, track your progress, gain confidence and expertise.

    Become a Member
    and unlock code for this lesson
    orLog In




    In JavaScript, functions execute until they've reached a return keyword or the end of the function. If we execute our logger here and run it with Node, you will see that it first logs start, and it then logs end. EA6 generators are different. They can be paused and resumed at arbitrary points within the function.

    To create a generator, we put an asterisk after the function keyword. If we execute this file again, you will see that nothing happens. Nothing is console.logged out. That is because when we call a generator, it returns an instance of itself but doesn't execute it.

    To be more exact, we should call our generator create logger, and assign it to a variable called logger. To execute our generator, we call, which executes until the next block is over. If we run this, you'll see again that we logged start and we logged end.

    To pause a generator, we use the yield keyword. The yield keyword tells the generator to stop executing at this point. If we run our file again, you will see this logs out start. The generator never reaches the console.log end. To execute the next block as well, we call again. As you can see, both start and end were logged out.

    We can have as many of these yield keywords in our generator as we want. If we say console.log second block and third block here, and then call a bunch of times, if we execute this, you will see that everything executes as you expect.