function *program() {
var rand;
rand = yield getRandAsync(); //async
log(rand);
rand = yield getRandSync(); //sync
log(rand);
rand = yield [getRandAsync(), getRandAsync(), getRandSync()]; //concurrent sync and async
log(rand);
}
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 (result.value instanceof Array) {
Promise.all(result.value).then(step);
} else if (!result.done) {
step(result.value);
}
}
}
function getRandAsync() {
return Promise.resolve(Math.random());
}
function getRandSync() {
return Math.random();
}