使用rxjs的条件发射延迟 [英] Conditional emission delays with rxjs

查看:129
本文介绍了使用rxjs的条件发射延迟的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从数据和盖茨获得可观察到的结果?

How to get the Out observable from Data and Gates?

  • 数据是任何类型的可观察对象,例如JSON对象要发送到远程后端
  • Gates是一个布尔型可观察值,其中刻度线对应于true,而叉号对应于false.例如,Internet连接表示为true表示网络可以访问,而false表示断开连接.
  • Out是所得的可观察对象,它与Data发出相同的信号,有时会立即发出,有时会延迟,具体取决于先前的门.例如,我可以订阅Out,以便在连接到Internet时将发出的JSON对象发布到远程API.

推荐答案

受此帖子的启发,以下内容似乎产生了预期的行为:

Inspired by contributions to this post, the following seems to yield the desired behaviors:

const ticks$ = gates$.filter(b => b)
const crosses$ = gates$.filter(b => !b)
const tickedData$ = data$.windowToggle(ticks$, _ => crosses$.take(1)).switch()
const crossedDataBuffers$ = data$.bufferToggle(crosses$, _ => ticks$.take(1))
const crossedData$ = Rx.Observable.from(crossedDataBuffers$)
const out$ = tickedData$.merge(crossedData$)

它可能会变得更简单,可以在 https://jsfiddle.net/KristjanLaane/6kbgnp41上播放/

It could possibly be made simpler, have a play at https://jsfiddle.net/KristjanLaane/6kbgnp41/

这篇关于使用rxjs的条件发射延迟的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆