Example generators III.
Made for kutac.cz/blog
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())
}