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

反应式编程:当流空闲一段时间时发出指定的元素

萧宁
2023-03-14

我有一个可观察的对象,我想在一段时间后(超时)发出一个默认元素,同时保持流仍然打开,以便将来发出新值。我该怎么做?

我试图通过将原始流与另一个流合并来实现这一点,该流将原始流去抖动,同时将去抖动值映射到我想要的默认值。

伪代码:

defaultDebounced = originalStream.debounce(time).map({x -> myDefaultValue})
myStream = rx.merge(originalStream, defaultDebounced)

虽然我不知道我是否会遇到一些像下面这样的边界情况,其中原始流在超时触发时发出一个项目,并且偶然地,默认值在之后被发出。

original:  ----A----B----------------------C------------
debounced: -----------------------<timeout>X------------
merged:    --------------------------------CX-----------

此外,还有一个缺点,即第一个可观察对象必须发出至少一个项目,才能使去抖动发出默认值。

注意:我想知道正确的rx方法来实现它,不管实现如何,但只是为了以防万一,我正在使用RxSwift。

共有1个答案

郎翔
2023-03-14

我最后做的是:

originalStream.flatMapLatest({x -> 
    return Observable.timer(30, scheduler: MainScheduler.instance)
        .map{_ -> defaultValue}
        .startWith(x)
})
 类似资料:
  • 用于在spring启动的应用程序中连接到ES6.4(托管在AWS上)。当应用程序空闲一段时间后,请求到达时,抛出: RestHighLevelClient使用以下方式创建: 使用版本。 有什么提示/变通办法吗?

  • 我想实现什么: 用户不活动3分钟后,我想显示一个新的活动。 研究: 我确实在Stackoverflow上查找了这个问题,我发现了一些提示,说明如何使用后台线程执行此操作,创建注册最后一次触摸的基本活动等。 问题: 如果我有超过 20 个活动,则表示 20 个活动,并且我不想从基本活动扩展所有活动。这意味着每次我创建一个新活动时,我都需要扩展这个基础活动,如果我的活动已经从其他一些基础活动扩展,这可

  • 本文向大家介绍php输出指定时间以前时间格式的方法,包括了php输出指定时间以前时间格式的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php输出指定时间以前时间格式的方法。分享给大家供大家参考。具体分析如下: 比如说你需要在php中输出3天前,20分钟以前,可以参考下面的代码 希望本文所述对大家的php程序设计有所帮助。

  • 我如何“强制”Espresso执行一个动作(单击取消),即使应用程序没有空闲?

  • 我正在开发一个将在Kiosk模式下运行的应用程序。在这个应用程序中,如果用户在5分钟内没有在应用程序中做任何事情,应用程序将显示一个屏幕保护程序,这是应用程序的徽标。 我的问题是,如何在5分钟内检测到空闲代码?

  • 本文向大家介绍Java编程Webservice指定超时时间代码详解,包括了Java编程Webservice指定超时时间代码详解的使用技巧和注意事项,需要的朋友参考一下 WebService是一种跨编程语言和跨操作系统平台的远程调用技术 所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统(采用交互提问的方式来加深大家对此技术的