let timeout = 1000; /** * Create a custom observable that creates a XHR request and returns complete when the promise is fulfilled */ let observable = Rx.Observable.create((o) => { dataService.fetch('test.json') .then((data) => { o.onNext(data); o.onCompleted(); }) .fail(o.onError); }); /** * Call our observable immediately and then add an interval for the polled requests */ let source = observable .take(1) .merge( Rx.Observable .interval(timeout) .flatMapLatest(observable) ) /** * Return events from the observable. */ source.subscribe( (data) => console.log(data), (error) => console.log(error), () => console.log('done') );