为什么我们需要使用flatMap?

我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似flatMapor 的函数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

回到顶部