Edit in JSFiddle

function log(arg) {
    $('<div>').text(arg).appendTo('body');
}

function run(gen) {
    
    step();
    
    function step(value) {
        var result = gen.next(value);
        if (result.value instanceof Promise) {
            result.value.then(step);
        }
    }
    
}

function *program() {
    var rand;
    rand = yield getRandAsync();
    log('first time around = ' + rand);
    rand = yield getRandAsync();
    log('second time around = ' + rand);
}

function getRandAsync() {
    return Promise.resolve(Math.random());
}

run(program());