我们正在使用扫描操作符来执行表中的“加载更多”按钮。使用scan操作符,我们只需将新结果与以前的结果相加。然而,我们遇到了一些意想不到的行为。
为了简化,假设我们有以下代码:
const fakeRequest = of('response').pipe(delay(2000));
interval(1000).pipe(
mergeMap(_ => fakeRequest),
scan<string>((allResponses, currentResponse) => [...allResponses, currentResponse], []),
).subscribe(console.log);
生产:
["response"]
["response", "response"]
["response", "response", "response"]
["response", "response", "response", "response"]
...
而如果我们只是将扫描操作符移动到mergeMap/switchMap操作符中:
interval(1000).pipe(
mergeMap(_ => fakeRequest.pipe(
scan<string>((allResponses, currentResponse) => [...allResponses, currentResponse], []),
)),
).subscribe(console.log);
我们得到以下结果:
["response"]
["response"]
["response"]
["response"]
...
在第二个示例中,未执行扫描运算符。我希望switchMap/mergeMap只是将内部的可观察对象展平,扫描操作符通过管道插入其中。
谢谢
产生差异的原因是,在第一种情况下:
interval(1000).pipe(
mergeMap(_ => fakeRequest),
scan<string>((allResponses, currentResponse) => [...allResponses, currentResponse], []),
)
您正在扫描mergeMap
中创建的所有可见光的发射。
然而,在第二种情况下:
interval(1000).pipe(
mergeMap(_ => fakeRequest.pipe(
scan<string>((allResponses, currentResponse) => [...allResponses, currentResponse], []),
)),
)
你正在扫描一个只发射一次的可观测物体的发射!
本质上,mergeMap()
是一个多次发射的源。fakeResponse
observable是一个只发射一次的源。
我从您的评论中看到,您希望在响应下移动扫描
的原因是希望在您的服务中执行扫描
,因此个人消费者不需要这样做。我知道这是一个老问题,所以也许你现在已经解决了这个问题,但是你当然可以在你的服务中执行扫描逻辑(只要你的间隔()也在那里),方法是在一个上添加。管道(扫描(...))
。
为了方便用户更快捷的操作,LSV有很多方便的快捷操作,主要是鼠标操作和快捷键操作。 鼠标操作: 点击鼠标左键拖拽可以拖动底图。 按下滚轮或右键拖拽鼠标,可以调整三维视角。 右击鼠标可以执行一系列包括复制坐标、测量地表距离、全屏显示、绕中心飞行、设置起点以及设置终点的操作。 快捷键操作: 地图区: Alt+1:绘制点 Alt+2:绘制线 Alt+3:绘制面 Alt+4:选择对象 WAS
为了方便用户更快捷的操作,LSV有很多方便的快捷操作,主要是鼠标操作和快捷键操作。 鼠标操作: 点击鼠标左键拖拽可以拖动底图。 按下滚轮或右键拖拽鼠标,可以调整三维视角。 右击鼠标可以执行一系列包括复制坐标、测量地表距离、全屏显示、绕中心飞行、设置起点以及设置终点的操作。 快捷键操作: 地图区: Alt+1:绘制点 Alt+2:绘制线 Alt+3:绘制面 Alt+4:选择对象 WAS
问题内容: 我有两个键为s且值为的映射。给定两个s,合并它们的最简单方法是什么,如果两个键相同,则值是两个集合的并集。您可以假设值永远不会为null,并且如果有用的话,我们可以将它们设为s。 问题答案: 我们在谈论实例。在这种情况下,查找值为O(1),因此您只需获取一个映射,然后对该映射的条目进行迭代,看看另一个映射是否包含该键。如果没有,只需添加设置。如果包含密钥,则将两个集合并集(通过将一个集
本文向大家介绍arcgis android之地图图层切换,包括了arcgis android之地图图层切换的使用技巧和注意事项,需要的朋友参考一下 图层切换是arcgis for android 开发必常见的功能,我的实现方法很简单。 首先初始化多个图层服务对象,如下: 在onCreate()方法里创建一个默认图层: 最后当点击相应的图层按钮时做判断即可: 好了,今天就写到这里,以后我再介绍其他a
在地图主界面找到工具箱,打开工具箱,工具箱底部有切换地图的选项,目前支持三种地图分别为普通地图、黑夜地图、卫星地图,如上图所示。
问题内容: 我想将两个Map与JAVA 8 Stream合并: 我尝试使用此实现: 但是,此实现只会产生如下结果: 如果中没有包含一个键,则会将其作为新键添加到相应的String列表中。如果键在和中重复,则两个值列表将被合并为:,然后是。 问题答案: 您可以通过遍历中的所有条目并将它们合并到中来实现此目的。 下面通过调用操作消耗每个条目的键和值的位置来遍历的条目。对于每个条目,我们叫上:这将要么创