为什么我们需要使用flatMap?
我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似flatMap
or 的函数concatAll
;数组的数组在哪里?
var requestStream = Rx.Observable.just('https://api.github.com/users');var responseMetastream = requestStream
.flatMap(function(requestUrl) {
return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl));
});
responseMetastream.subscribe(url => {console.log(url)})
如果有人可以直观地解释正在发生的事情,那将非常有帮助。
回答:
['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]]
当您有一个Observable的结果是更多Observable时,可以使用flatMap。
如果您有一个由另一个可观察对象产生的可观察对象,则您不能直接过滤,缩小或映射它,因为您有一个可观察对象而不是数据。如果您生成一个可观察的图像,则在地图上选择flatMap;那你还好
与第二个代码段一样,如果要进行异步操作,则需要使用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>
以上是 为什么我们需要使用flatMap? 的全部内容, 来源链接: utcz.com/qa/406353.html