RxJS FlatMap actions
by myrluk3
HTML
<div id="content"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.6/Rx.min.js"></script>
JavaScript
const content = document.querySelector('#content');
const actions = [{
condition: true,
value: 'alma'
},
{
condition: true,
value: 'korte'
},
{
condition: true,
value: 'sziiiilva'
}
];
/* const handleAction = (c, a) => {
console.log('subs', c)
if (confirm(a && a.value)) {
content.append(a && a.value + ' ');
return Rx.Observable.of(c);
} else {
return Rx.Observable.empty();
}
};
*/
const handleAction = (a) => {
console.log('subs', a)
if (confirm(a && a.value)) {
content.append(a && a.value + ' ');
return Rx.Observable.of(a);
} else {
return Rx.Observable.empty();
}
};
const toSubs = actions.reduce((acc, curr) => {
return acc ? acc.switchMap(handleAction.bind(this, curr)) : Rx.Observable.of(curr).switchMap(handleAction.bind(this, curr));
}, null);
//let toSubs = Rx.Observable.of(actions[0]).switchMap(handleAction.bind(this, null));
//actions.slice(1).forEach((action, index) => {
// toSubs = toSubs.switchMap(handleAction.bind(this, actions[index - 1], action));
//});
toSubs.subscribe(
(a) => {
console.log('SUB');
},
err => {
console.log('errrrr', err);
},
() => {
console.log('completed!')
content.append(' DO_ACTION')
}
);