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 最新一次,无需处理的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift:嵌套可观察对象上的 FlatMap

RXSwift flatMap 两种方法

使用 if/else 语句返回 observable 不适用于 RxSwift flatMap

RxSwift: 链 Completable 到 Observable

RxSwift:调用中的额外参数“onError”

根据 UITextField 中的值禁用按钮只能工作一次(RxSwift)