Pulse7
8/19/2017 - 3:02 PM

Observable from fetch

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")
    );