generator coroutine
by Artem
JavaScript
'use strict';
function asyncOne() {
return Promise.resolve(1);
}
function asyncTwo() {
return Promise.resolve(2);
}
function asyncThree() {
return Promise.resolve(3);
}
function* createFoo() {
const one = yield asyncOne();
const two = yield asyncTwo();
const three = yield asyncThree();
return three;
}
function coroutine(generator) {
const gen = generator();
function handle(res) {
if (res.done) return Promise.resolve(res.value);
return Promise.resolve(res.value)
.then(result => handle(gen.next(result)));
}
return handle(gen.next());
}
/*const foo = createFoo();
foo.next().value
.then(res => foo.next(res).value)
.then(res => foo.next(res).value)
.then(console.log);
*/
coroutine(createFoo).then(console.log)