Example generators III.

Made for kutac.cz/blog

HTML

<div id="o"></div>

Babel + JSX

const print = t => document.querySelector('#o').innerHTML += `${t}<br>`

// Reseni jen pomoci Promise
fetch('https://jsonplaceholder.typicode.com/posts/42')
  .then(res => res.json())
  .then(post => post.title)
  .then(title => print(title))
  
// Reseni pomoci Generatoru
run(function *() {
	const url = 'https://jsonplaceholder.typicode.com/posts/42'
  const res = yield fetch(url)
  const post = yield res.json()
  
  return post.title
})
.catch(error => print(error))
.then(title => print(title))

// Funkce, ktera vyresi Promise vraceny yieldem z Generatoru
// a pak znova nastartuje Generator s vyresenou hodnotou
function run(generator) {
	const iterator = generator()
  
  function iterate(iteration) {
  	if (iteration.done) return iteration.value
    const promise = iteration.value
    return promise.then( x => iterate(iterator.next(x)) ) 
  }
  
  return iterate(iterator.next())
}