asyncIteratorWrapper
by Alex Liu
Babel + JSX
console.clear()
function* abc() {
const a = yield Promise.resolve(1);
const b = yield Promise.resolve(2);
const c = yield 4
return a + b + c;
}
function isPromise(value){
return value instanceof Promise
}
async function loopGenerator(g){
async function loop(arg){
const {done, value} = g.next(arg)
if(!done){
if(isPromise(value)){
const res = await value
return await loop(res)
}else{
return loop(value)
}
}
return value
}
return loop()
}
function asyncIterator(generator){
return function(...args){
const g = generator(...args)
return loopGenerator(g)
}
}
const asyncIterable = asyncIterator(abc)
const bb = asyncIterable()
bb.then(console.log)