JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.2/Rx.min.js"></script>
JavaScript
var Observable = Rx.Observable;
var initialDelay = 2000;
var repeatDelay = 200;
function repeat(v) { return v; }
function init() { return Observable.of(42); }
function status(_) { return Observable.of(!!Math.round(Math.random())); }
function recurse(id) {
const status$ = status(id).share();
const tail$ = status$.delay(repeatDelay).flatMap(status => repeat(status) ? recurse(id) : Observable.empty());
return status$.merge(tail$);
}
init().delay(initialDelay).flatMap(id => recurse(id)).subscribe(console.log);