['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]]
Bạn sử dụng flatMap khi bạn có một Observable có kết quả nhiều hơn Observable.
Nếu bạn có một vật có thể quan sát được tạo ra bởi một vật thể quan sát khác, bạn không thể lọc, giảm hoặc lập bản đồ trực tiếp vì bạn có Dữ liệu quan sát không phải là dữ liệu. Nếu bạn tạo ra một bản đồ phẳng có thể quan sát được, hãy chọn bản đồ; sau đó bạn không sao.
Như trong đoạn mã thứ hai, nếu bạn đang thực hiện thao tác không đồng bộ, bạn cần sử dụng 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>