Reactive / 响应式编程
Reactive 这个目录给了你处理异步事件、后台计算的工具,甚至让你能搭出自己的主循环、跑在另一个 CPU 核心上。
处理事件
处理事件时首选的节点,是 Reactive 目录下的 ForEach 区块。这个区块允许你在里面放任何节点,也能在两次事件之间记住数据。还有一个 Keep 版本,可以用一个布尔输出把事件过滤掉。这个区块与用于 Spread 的 ForEach 区块非常相似,区别只在于它的输入输出是随时间到来的事件值,而不是 Spread 里的 slice。
在后台每 30 秒刷新一次网络数据,并把结果传给主循环
切换或合并事件源
切换或合并 midi 事件
过滤
用 OfType 或 Where 也可以做过滤:
从合并后的事件流里只取 TouchDown 事件
其他节点还包括
- Skip
- Delay
- Delay (Selector)
- Scan
- Switch……
接收事件
如果你想离开 Observable 的世界、把事件值传给主循环,用下面这 3 个节点之一:
- HoldLatest:总是返回最新的值
- Sampler:返回自上一帧以来的所有事件值,可能为空
- S+H:与 Sampler 相同,但会一直返回同样的值,直到下一个事件到来
它们的行为各有一点不同,看你需要哪种:
把事件值传给主循环的三种方式
创建事件
生成你自己的事件源同样容易:
创建 Observable 事件源的不同方式
备注
只发送 Record 类型的值作为事件数据,因为它们是线程安全的。如果你要发送任何 Class 类型的值,请确保你非常清楚自己在做什么!