Javascript RXJS-平面图冗余使用?
我读过一篇关于RXJS的文章,其中还介绍了Javascript RXJS-平面图冗余使用?,javascript,rxjs,flatmap,Javascript,Rxjs,Flatmap,我读过一篇关于RXJS的文章,其中还介绍了flatMap 我已经知道了它们之间的区别,以及它们的实际作用,它将可观察到的事物展平为一个单一的可观察序列。(类似于C#中的SelectMany) 无论如何,他们使用了flatMap作为jQuerygetJson请求: var responseStream = requestStream .flatMap(function(requestUrl) { return Rx.Observable.fromPromise(jQuery.getJS
flatMap
我已经知道了它们之间的区别,以及它们的实际作用,它将可观察到的事物展平为一个单一的可观察序列。(类似于C#中的
SelectMany
)
无论如何,他们使用了flatMap
作为jQuerygetJson
请求:
var responseStream = requestStream
.flatMap(function(requestUrl) {
return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl));
});
我很清楚发生了什么(我在很多地方都看到这种用法)
但这难道不是一个简单的问题吗:(下面的代码不起作用,但我还是想知道为什么,因为从逻辑上看,它应该起作用)
?
问题
这两个片段之间有什么区别
第二个代码段中的代码未按预期工作,因为它创建了可观察的承诺(而不是值)<代码>映射操作员将不会取消从其返回的承诺 因此,您仍然需要
flatMap
或类似的操作符来展开承诺,但您可以在其中直接返回承诺,并将代码简化如下:
var responseStream = requestStream
.flatMap(function(requestUrl) {
return jQuery.getJSON(requestUrl);
});
这里有不止一个问题,所以我会尝试回答这两个问题:
Promise
包装成Observable.fromPromise
或类似内容flatMap
很可能会将Promise强制转换为Observable,而map
则不会,这就是为什么您的代码片段不会调用任何东西:Observable是惰性的,您需要在map函数之后订阅每个Observable,以便实际运行PromiseflatMap为什么知道展开承诺,它应该在哪里展开观测值?它也支持承诺,除此之外,您可以从它返回数组,它还将展平它。不确定rxjs5指向哪里,但rxjs4指向哪里:
var responseStream = requestStream
.flatMap(function(requestUrl) {
return jQuery.getJSON(requestUrl);
});