Edit in JSFiddle

function *program() {
    var {moe, larry, curly} = yield {
    	moe: getUserAsync('Moe'),
    	larry: getUserAsync('Larry'),
    	curly: getUserAsync('Curly')
    };
    log(moe);
    log(larry);
    log(curly);
    var me = yield getUserAsync('Me');
    log(me)
}

run(program());







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

function run(gen) {
    
    step();
    
    function step(value) {
        var result = gen.next(value);
        if (result.value instanceof Promise) {
            result.value.then(step);
        } else if (typeof result.value === 'object') {
            Promise.props(result.value).then(step);
        } else if (!result.done) {
            step(result.value);
        }
    }
    
}

function getUserAsync(name) {
    return new Promise(function(res) {
        log('Starting mock get')
        setTimeout(function() {
            res({name:name, age: ~~(Math.random() * 50)});
        }, 1000);
    });
}