跳到主要内容

Reactive / 响应式编程

源文档地址

Reactive 这个目录给了你处理异步事件、后台计算的工具,甚至让你能搭出自己的主循环、跑在另一个 CPU 核心上。

处理事件

处理事件时首选的节点,是 Reactive 目录下的 ForEach 区块。这个区块允许你在里面放任何节点,也能在两次事件之间记住数据。还有一个 Keep 版本,可以用一个布尔输出把事件过滤掉。这个区块与用于 Spread 的 ForEach 区块非常相似,区别只在于它的输入输出是随时间到来的事件值,而不是 Spread 里的 slice。

在后台每 30 秒刷新一次网络数据,并把结果传给主循环

切换或合并事件源

切换或合并 midi 事件

过滤

OfTypeWhere 也可以做过滤:

从合并后的事件流里只取 TouchDown 事件

其他节点还包括

  • Skip
  • Delay
  • Delay (Selector)
  • Scan
  • Switch……

接收事件

如果你想离开 Observable 的世界、把事件值传给主循环,用下面这 3 个节点之一:

  • HoldLatest:总是返回最新的值
  • Sampler:返回自上一帧以来的所有事件值,可能为空
  • S+H:与 Sampler 相同,但会一直返回同样的值,直到下一个事件到来

它们的行为各有一点不同,看你需要哪种:

把事件值传给主循环的三种方式

创建事件

生成你自己的事件源同样容易:

创建 Observable 事件源的不同方式

备注

只发送 Record 类型的值作为事件数据,因为它们是线程安全的。如果你要发送任何 Class 类型的值,请确保你非常清楚自己在做什么!