['a','b','c'].flatMap(function(e) {
return [e, e+ 'x', e+ 'y', e+ 'z' ];
});
//['a', 'ax', 'ay', 'az', 'b', 'bx', 'by', 'bz', 'c', 'cx', 'cy', 'cz']
['a','b','c'].map(function(e) {
return [e, e+ 'x', e+ 'y', e+ 'z' ];
});
//[Array[4], Array[4], Array[4]]
Vous utilisez flatMap lorsque vous avez un observable dont les résultats sont plus observables.
Si vous avez une observable qui est produite par une autre observable, vous ne pouvez pas la filtrer, la réduire ou la mapper directement car vous avez une observable et non les données. Si vous produisez une observable, choisissez flatMap sur map; alors tu vas bien.
Comme dans le deuxième extrait de code, si vous effectuez une opération asynchrone, vous devez utiliser flatMap.
var source = Rx.Observable.interval(100).take(10).map(function(num){
return num+1
});
source.subscribe(function(e){
console.log(e)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.1/Rx.min.js"></script>
var source = Rx.Observable.interval(100).take(10).flatMap(function(num){
return Rx.Observable.timer(100).map(() => num)
});
source.subscribe(function(e){
console.log(e)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.1/Rx.min.js"></script>