Observable from fetch
import { Observable } from "rxjs";
let output = document.getElementById("output");
let button = document.getElementById("button");
let click = Observable.fromEvent(button, "click");
function loadWithFetch(url: string) {
return Observable.defer(
() => Observable.fromPromise(fetch(url).then(r => r.json())
)
);
}
function retryStrategy({ attempts = 4, delay = 1000 }) {
return function (errors) {
return errors
.scan((acc, value) => {
console.log(acc, value);
return acc + 1;
}, 0)
.takeWhile(acc => acc < attempts)
.delay(delay);
}
}
function renderMovies(movies) {
movies.forEach(m => {
let div = document.createElement("div");
div.innerHTML = m.title;
output.appendChild(div);
});
}
click.flatMap(e => loadWithFetch("movies.json"))
.subscribe(
renderMovies,
e => console.log(e),
() => console.log("complete")
);