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)