我开始使用 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)})
如果有人可以直观地解释正在发生的事情,那将非常有帮助。
原文由 user233232 发布,翻译遵循 CC BY-SA 4.0 许可协议
当我开始看
Rxjs
时,我也偶然发现了那块石头。对我有帮助的是以下内容:flatMap
: http ://reactivex.io/documentation/operators/flatmap.htmlflatMap
,你必须看看mergeMap
而不是(另一个名字)。Observable<T>
an observable object which pushes values of type T, thenflatMap
takes a function of typeT' -> Observable<T>
as its argument, and returnsObservable<T>
。map
采用类型为T' -> T
的函数并返回Observable<T>
。回到您的示例,您有一个从 url 字符串生成承诺的函数。所以
T' : string
和T : promise
。根据我们之前所说的promise : Observable<T''>
,所以T : Observable<T''>
和T'' : html
。 If you put that promise producing function inmap
, you getObservable<Observable<T''>>
when what you want isObservable<T''>
: you want the observable to emit thehtml
价值观。flatMap
之所以这样称呼是因为它展平了(删除了一个可观察层)来自map
的结果。根据你的背景,这对你来说可能是中文,但通过输入信息和从这里绘图,一切对我来说都变得非常清晰: http ://reactivex.io/documentation/operators/flatmap.html。