我开始使用RxJS,我不明白为什么在这个例子中我们需要使用像flatMap或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)})
如果有人可以直观地解释发生了什么,那将非常有帮助.
解决方法:
当我开始看看Rxjs时,我偶然发现了那块石头.帮助我的是以下内容:
>来自reactivex.io的文档.例如,对于flatMap:http://reactivex.io/documentation/operators/flatmap.html
>来自rxmarbles的文档:http://rxmarbles.com/.你不会在那里找到flatMap,你必须看看mergeMap(另一个名字).
>你所缺少的Rx简介:https://gist.github.com/staltz/868e7e9bc2a7b8c1f754.它解决了一个非常相似的例子.特别是它解决了一个事实,即承诺类似于只发出一个值的可观察值.
>最后查看RxJava的类型信息.没有输入的Javascript在这里没有帮助.基本上如果Observable< T>表示推送类型T的值的可观察对象,然后flatMap采用类型T’ – >的函数.可观察到的< T>作为其参数,并返回Observable< T>. map采用T’类型的函数 – > T并返回Observable< T>.
回到你的例子,你有一个函数,它从url字符串产生promises.所以T’:字符串,而T:承诺.从我们之前所说的承诺:Observable< T''>,所以T:Observable< T''>,用T”:html.如果你把这个promise生成函数放在map中,你会得到Observable< Observable< T''>>当你想要的是Observable< T''>:你希望observable发出html值. flatMap的调用方式与此类似,因为它会平滑(删除可观察的图层)map中的结果.根据你的背景,这对你来说可能是中国人,但是一切都变得非常清晰,输入信息和图纸来自这里:http://reactivex.io/documentation/operators/flatmap.html.