当前位置: 首页 > 知识库问答 >
问题:

拉链室流动防止更新

何松
2023-03-14

我的存储库中有一个getplaces方法:

override fun getPlaces(filter: FilterRequest): Flowable<List<Place>> {
    return from(placesApi.filter(filter))
            .doOnSuccess {
                placesDao.savePlaces(it)
            }
            .flatMapPublisher { it ->
                placesDao.getPlaces(it.map { it.placeId })
            }
}

此方法从api收集结果,然后将结果保存到数据库中,并返回一个flowable,其中这些位置按id从数据库中检索为flowable:

@Query("select * from Places where placeId in (:placesIds)")
fun getPlaces(placesIds: List<String>) : Flowable<List<Place>>

现在,每次我改变其中的一个对象,我可以看到整个我的应用程序的变化。

 override fun addDistanceToPlaces(req: Flowable<List<Place>>): Flowable<List<Place>> {
        return req
                .zipWith(getLastLocation().toFlowable(BackpressureStrategy.LATEST),
                        BiFunction<List<Place>, Location, List<Place>> { places, location ->
                            places.forEach {
                                var placeLocation = Location(it.placeName)
                                placeLocation.latitude = it.latitude
                                placeLocation.longitude = it.longitude

                                it.distance = location.distanceTo(placeLocation)
                            }
                            places.sortedBy {
                                it.distance
                            }
                        })
                .onErrorResumeNext { t: Throwable ->
                    req
                }

    }

为什么会这样?ntzip应该把这两种来源的排放结合起来吗?

共有1个答案

金高飞
2023-03-14

您的问题是试图为您的用例使用zip运算符。Zip通过对输入可观察的值进行配对来发出。它并不是对单个可观察物的每一次变化都发射,而是当它们都发射时。查看它的大理石,以帮助您可视化它的行为:

http://reactiveX.io/documentation/operators/zip.html

因此,在您的例子中,房间可观察到的是发射到您的zip函数中,但位置可观察到的是不更新的,因此,您不会调用您的函数。

 类似资料:
  • 问题内容: 样品: 我有两个问题,请: 为什么基本上会发生这种情况? 什么是正确的方法,以防止其拉伸而不影响flex容器中的其他flex项目? 问题答案: 您不想拉伸高度跨度吗? 您可能会影响一个或多个弹性项目,而不会拉伸容器的整个高度。 要影响容器的所有弹性项目,请选择以下选项: 您必须设置为,并且该容器的所有弹性项目都将获得其内容的高度。 要仅影响单个flex-item,请选择以下选项: 如果

  • 我正在运行一个spark作业,流上下文每60秒运行一次。问题是一批处理时间太长(由于计算和保存RDD和Parquet到云存储),一批无法在1分钟内完成。它结束于下一批继续进入并成为活动的(状态=处理)。过了一段时间,我有10个活动批处理,而第一个已经完成。结果,它明显减慢,没有一批能够完成。是否存在严格限制一次活动批处理的数量为1。 多谢了。

  • 本文向大家介绍Hypertext Access file 防止热链接,包括了Hypertext Access file 防止热链接的使用技巧和注意事项,需要的朋友参考一下 例子 这将阻止所有来自域名的“ .gif”,“。jpg”和“ .css”文件链接http://www.yourdomain.com。 显示替代内容: 这将阻止所有不是来自域名“ http://www.yourdomain.com

  • 问题内容: 保存hibernate对象时,hibernate中是否有设置可以 忽略 属性的 空值 ? 注意 在我的情况下,我正在通过杰克逊将JSON反序列化为Hibernate Pojo。 JSON仅包含Pojo的某些字段。如果保存Pojo,则不在JSON中的字段在Pojo中为null,然后hibernate更新它们。 我遇到了这个问题,但这不是100%的解决方案。 http://docs.jbo

  • 我当前有一个配置有以下线程池的JMSListener: 我正在监听的队列有超过100条消息,当我启动侦听器时,它将处理前10条消息,没有任何问题,然后我将为其余的消息获得TaskRejectedException异常。 我的意图是,如果没有可用的线程来处理消息,@JMSListener不应该拉出任何新消息。有没有人知道这个配置是不是可以?我使用的是SpringBoot的1.5.3版本。

  • 是否存在防止DynamoDB流在每次DynamoDB更改时触发λ的方法? 这些数字并不准确,但是假设step函数将连续运行10次,那么它将更新DynamoDB 3次。在step函数触发lambda之前,这是调用lambda的30倍。有什么方法可以阻止这些lambda调用吗?