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(x)}};
var initialData = "initial data";
var chainedPromises$ = Rx.Observable.fromPromise(Fn1.doPromise( initialData ))
.flatMap(function (info) {
return Rx.Observable.fromPromise(Fn2.doPromise( info ))
.flatMap(result => {
//success - return result
// !! You must return an observable or a promise here !!
return Rx.Observable.return('success - return result: ' + result);
})
.catch(function(error) {
//error
return Rx.Observable.return('error - return error: ' + error);
});
})
.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(){ });