RxJava并在集合中保存数据

时间:2017-12-18 10:08:01

标签: multithreading asynchronous rx-java reactive-programming

用rxjava进行一些编码后会让你以一种完全不同的方式思考我仍然无法理解当我想要一些操作来保存集合中的一些数据(让我们说一个关键值的映射)让我接近时我应该怎么做所有请求完成后。 例如,假设我想向某些api发出一些put调用并在地图中保存所有失败的调用响应,以便稍后进行一些“错误更正”。 到目前为止我看起来需要从上到下编写整个流程来执行此请求 - >错误 - >更正哪个是操作管道,我想分开两个不同的操作,这些操作发生在不同的时间。 我确实意识到我可能错过了rxjava的关键概念。

总结如何将数据缓存在集合外部以供稍后解决?当请求失败时,只是将数据放入concurrentHashMap是好主意吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

通常,如果您想为RX链添加副作用,您需要使用doOnNextdoOnError - 可能是您的用例的第二个。您可以在Action1实施中将其添加到您的收藏中。

答案 1 :(得分:0)

我在这里看到几个问题。

  • 从Rx改变状态确实称为副作用,通常通过 .doOn ...()方法完成。
  • 通过应用 .materialize()运算符,可以在一种方法中处理成功和错误事件。
  • 可以在concurrentHashMap中保存状态,但是您不会收到任何更新的通知。
  • 所以我可能宁愿将状态保存在通过应用于物化响应流的 .scan()更新的对象中。
  • 可以使用 .switchLatest()/。switchOnNext()运算符将所有响应组合到一个流而无需重新订阅。请参阅此处的RxSwift示例 - https://github.com/maxvol/RaspSwift/blob/master/RaspSwift/RaspAggregator.swift(RxSwift中的'.switchLatest()'与RxJava中的'.switchOnNext()'相同)