Async generators

by Uday Hiwarale

HTML

<script src="https://rawgit.com/eu81273/jsfiddle-console/master/console.js"></script>

JavaScript

const a = () => new Promise( resolve => {
    setTimeout( () => resolve( 'result of a()' ), 1000 ); // 1s delay
} );

const b = () => new Promise( ( resolve, reject ) => {
    setTimeout( () => resolve( 'result of b()' ), 500 ); // 0.5s delay
} );

const c = () => new Promise( resolve => {
    setTimeout( () => resolve( 'result of c()' ), 1100 ); // 1.1s delay
} );

// async generator function
const MyAsyncGenerator = async function*() {
    yield await a();
    yield await b();
    yield await c();
};

// generator object
const gen = MyAsyncGenerator();

// get `gen` values 
(async () => {
    console.log( await gen.next() );
    console.log( await gen.next() );
    console.log( await gen.next() );
    console.log( await gen.next() );
})();