RxJS .zip and .switchLatest

HTML

<script src="https://rawgit.com/Reactive-Extensions/RxJS/master/dist/rx.all.js"></script>
<script src="https://cdn.jsdelivr.net/rsvp/3.0.6/rsvp.js"></script>
<textarea id='ta_error_handler_1'></textarea>
<textarea id='ta_error_handler_2'></textarea>
<textarea id='ta_result'></textarea>

CSS

textarea {
    font-family:"Courier New", monospace;
    font-size: 12px;
    width: 100%;
    height: 120px;
}

JavaScript

var ta_error_handler_1 = document.getElementById('ta_error_handler_1');
var ta_error_handler_2 = document.getElementById('ta_error_handler_2');
var ta_result = document.getElementById('ta_result');

function emits ( who, who_ ) {return function ( x ) {
 who.innerHTML = [who.innerHTML, who_ + " emits " + JSON.stringify(x)].join("\n");
};}

var Fn1 = {doPromise : function (x) {return RSVP.resolve("Fn1: " + x)}};
var Fn2 = {doPromise : function (x) {return RSVP.resolve("Fn2: " + x)}};
var FnError = {doPromise : function (x) {return RSVP.reject("FnError: ")}};

var initialData = "initial data";

var chainedPromises$ = Rx.Observable.fromPromise(Fn1.doPromise( initialData ))
  .flatMap(function (info) {
        return Rx.Observable.fromPromise(FnError.doPromise( info ))
              .flatMap(result => {
                  //success - return result
                  // !! You must return an observable or a promise here !!
                  return Rx.Observable.return('return result: ' + result)
                                      .do(emits(ta_result, 'success'));
              })
              .catch(function(error) {
                //error
                  return Rx.Observable.return('error - return error: ' + error)
                                      .do(emits(ta_error_handler_2, 'Inner error handler'));
              });
  })
.catch(function(error) {
  //cancel 2nd promise and show error
  // !! You must return an observable here !!
  console.log("error", error)
  return Rx.Observable.return('Returns error: ' + error)
   .do(emits(ta_error_handler_1, 'Topmost error handler'));
});

chainedPromises$.subscribe(function(){    });
//changeEvent$.subscribe(function(){    });
//filteredValidation$.subscribe(function(){    });