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);
});
}