RXJS - flatMap 冗余使用?
RXJS - flatMap redundant usage?
我读过关于 RXJS 的 article,其中还解释了 flatMap
。
我已经知道有什么区别以及它实际上做了什么,它将可观察到的可观察到的可观察到单个可观察序列。 (类似于 C# 中的 SelectMany
)
无论如何,他们已经使用 flatMap
进行 jQuery getJson
请求:
var responseStream = requestStream
.flatMap(function(requestUrl) {
return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl));
});
我很清楚这是怎么回事(我在很多地方都看到这种用法)
但这难道不是一个简单的:(下面的代码不起作用但我仍然想知道为什么,因为从逻辑上讲它似乎应该起作用)
var responseStream = requestStream
.map(function(requestUrl) {
return jQuery.getJSON(requestUrl);
});
?
问题
这两个片段有什么区别?
第二个代码段中的代码未按预期工作,因为它创建了承诺的可观察对象(不是值)。 map
运算符不会解包承诺 return 从它。
因此,您仍然需要 flatMap
或类似的运算符来解包 promise,但您可以 return 直接在其中承诺,并简化代码如下:
var responseStream = requestStream
.flatMap(function(requestUrl) {
return jQuery.getJSON(requestUrl);
});
你的问题不止一个,所以我会尽量一一回答:
- 您想知道它是否支持 promises,但目前支持,请参阅 the examples。问题是,只要没有记录在案,他们将来就可以取消这种支持,所以你现在可以把每个
Promise
包装成 Observable.fromPromise
或类似的东西。
- 内部
flatMap
很可能将 Promise 转换为 Observable 而 map
不会,这就是为什么你的代码片段不会调用任何东西:Observables 是惰性的,你需要在之后订阅每个 Observable地图函数实际上是 运行 Promise
我读过关于 RXJS 的 article,其中还解释了 flatMap
。
我已经知道有什么区别以及它实际上做了什么,它将可观察到的可观察到的可观察到单个可观察序列。 (类似于 C# 中的 SelectMany
)
无论如何,他们已经使用 flatMap
进行 jQuery getJson
请求:
var responseStream = requestStream
.flatMap(function(requestUrl) {
return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl));
});
我很清楚这是怎么回事(我在很多地方都看到这种用法)
但这难道不是一个简单的:(下面的代码不起作用但我仍然想知道为什么,因为从逻辑上讲它似乎应该起作用)
var responseStream = requestStream
.map(function(requestUrl) {
return jQuery.getJSON(requestUrl);
});
?
问题
这两个片段有什么区别?
第二个代码段中的代码未按预期工作,因为它创建了承诺的可观察对象(不是值)。 map
运算符不会解包承诺 return 从它。
因此,您仍然需要 flatMap
或类似的运算符来解包 promise,但您可以 return 直接在其中承诺,并简化代码如下:
var responseStream = requestStream
.flatMap(function(requestUrl) {
return jQuery.getJSON(requestUrl);
});
你的问题不止一个,所以我会尽量一一回答:
- 您想知道它是否支持 promises,但目前支持,请参阅 the examples。问题是,只要没有记录在案,他们将来就可以取消这种支持,所以你现在可以把每个
Promise
包装成Observable.fromPromise
或类似的东西。 - 内部
flatMap
很可能将 Promise 转换为 Observable 而map
不会,这就是为什么你的代码片段不会调用任何东西:Observables 是惰性的,你需要在之后订阅每个 Observable地图函数实际上是 运行 Promise