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