JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.3/rxjs.umd.min.js"></script>
JavaScript
const { of, operators, merge } = rxjs;
const { map, filter, takeLast } = operators;
const divisibleNum = { num: 24 };
const divisible$ = of(divisibleNum);
const divisibleBy2$ = divisible$
.pipe(
filter((data) => {
return data.num % 2 === 0;
}),
map((data) => {
return {
...data,
from: 2
}
})
);
divisibleBy2$
.subscribe(() => {
console.log("Divisible by 2");
});
const divisibleBy4and2$ = divisibleBy2$
.pipe(
filter((data) => {
return data.num % 4 === 0;
}),
map((data) => {
return {
...data,
from: 4
}
})
);
divisibleBy4and2$
.subscribe(() => {
console.log("Divisible by 4 and 2");
});
const divisibleBy6And4And2$ = divisibleBy4and2$
.pipe(
filter((data) => {
return data.num % 6 === 0;
}),
map((data) => {
return {
...data,
from: 6
}
})
);
divisibleBy6And4And2$
.subscribe(() => {
console.log("Divisible by 6, 4, and 2");
});
// Since multiple divisible observables will trigger, and the
// last observable in the merge array is what gets triggered
// after all the prior observable in the list have triggered,
// get the last return.
merge(divisibleBy2$, divisibleBy4and2$, divisibleBy6And4And2$)
.pipe(
takeLast(1)
)
.subscribe((data) => {
console.log("Divisible from divisible factor", data.from, "and below");
});