RxSwift flatMap 最新一次,无需处理
Posted
技术标签:
【中文标题】RxSwift flatMap 最新一次,无需处理【英文标题】:RxSwift flatMap latest one time without disposing 【发布时间】:2016-09-27 23:41:56 【问题描述】:有一个简单的问题:我有一个Variable<[Session]>
,其中Session
:
class Session
...
var rx_serverRequestable: Driver<SessionRequestable>
...
每次会话具有需要传递到后端的所有信息时都会发出一个 .next 事件,我希望能够在会话数组上flatMapLatest
,并执行以下操作:
let sessions: Variable<[Session]>
sessions
.flatMapLatest sessions in sessions.map $0. rx_serverRequestable
.flatMap $0.requestFromServer()
但我只想请求每个会话一次。我发现当前实现失败的方式有两种:
1. flatMapLatest 获取一个新的会话数组,可能会处理来自仍在进行中的服务器的请求
2. 每次会话具有从服务器加载所需的所有信息时都会调用 rx_serverRequestable,因此每次会话加载任何新信息时都会多次调用它。我只希望第一次请求会话,我应该使用.multicast
或.replay(1)
之类的东西吗?
关于解决这两个问题或改变我的方法的任何指示?
【问题讨论】:
您打算如何处理sessions.flatMapLatest...flatMap
调用产生的结果?
将从服务器接收到的信息分配回会话上的实例变量
【参考方案1】:
这可以使用zip
运算符http://reactivex.io/documentation/operators/zip.html 解决
【讨论】:
以上是关于RxSwift flatMap 最新一次,无需处理的主要内容,如果未能解决你的问题,请参考以下文章
使用 if/else 语句返回 observable 不适用于 RxSwift flatMap