【发布时间】:2015-03-07 15:30:27
【问题描述】:
我不太确定如何正确地做到这一点,而且我可能错过了一些关于 FRP 的概念,因为我没有长时间使用 ReactiveCocoa。
我的情况是这样的 - 我有信号:
- 从本地存储加载对象;
- 从远程存储加载对象;
- 将远程对象保存到本地存储;
- 将本地存储中的对象转换(映射)为不同的格式
我想要一个可以订阅的信号,它将:
- 通过 localId 从本地存储加载对象;
- 在此处将信号拆分为:
- 向信号的订阅者发送一个初始对象:
- 将对象转换为不同的格式;
- 将此格式发送给最终订阅者;
- 从远程存储更新本地对象并发送更新版本;
- 使用刚刚加载的本地对象的 remoteId 从远程存储加载对象;
- 将该远程对象保存到本地存储;
- 从本地存储中从原始 localId 重新加载对象;
- 将对象转换为不同的格式;
- 将此格式发送给最终订阅者;
- 完成信号。
- 向信号的订阅者发送一个初始对象:
这一切背后的想法是,我的主要加载对象信号应该返回对象的初始版本(本地存储),同时从远程存储更新该对象并最终发送更新的版本。所以最终订阅者应该在完成之前收到两次对象。
远程加载信号依赖于本地加载信号,因为我们必须加载本地对象才能获得对象的remoteId。因此,我想避免在启动信号时两次加载本地对象(一次用于发送给原始订阅者,一次用于获取 remoteId 以加载远程对象)。
我想出的最初解决方案是使本地加载信号成为多播 (autoconnected) 信号,然后将该信号(与转换链接到它)与相同的信号(与远程加载,保存,加载和转换链接到它)。但是,这永远不会进行远程加载,我只能认为这是由于本地加载信号发送completed。
有什么方法可以做我想做的事吗?我的逻辑完全错了吗? 提前感谢您的任何建议。
【问题讨论】:
标签: reactive-cocoa frp