const delay = (ms) => new Promise((resolve, reject) => setTimeout(() => resolve('Vika'), ms)); function* likeAsync () { console.log(1); console.log(yield 1.5); let res1 = yield delay(2000); console.log(2, res1); let res2 = yield delay(2000); console.log(3, res2); try { console.log(yield fetch("http://localhost:10000")); } catch (e) { console.log('generator error catch', e); } let res3 = yield delay(2000); console.log(4, res3); let res4 = yield delay(2000); console.log(5, res4); } function run (gena) { let iter = gena(); function next(result, error) { let value; let done; if (error) { const errGen = iter.throw(error); value = errGen.value; done = errGen.done; } if(!error) { const resultGen = iter.next(result); value = resultGen.value; done = resultGen.done; } if (done) {return}; if(value && typeof value?.then === 'function'){ value.then(next, err => next(undefined, err)) } else { next(value); } } next(); } run(likeAsync);