我有一个Observable,它发出一个特定的对象S.这个对象内部有一个对象列表,每个对象都包含一组值.我需要将这些数据平放(将所有内部集合展开为长序列的平面对象A),如果它尚不存在则将其存储在数据库中,然后将对象A的序列减少回具有类似的对象T结构到起始对象S,我需要传递.
我认为在函数之外改变状态不是一个好主意,所以把它写成像这样的一个大的Observable转换是不行的(特别是因为在第二个映射中还有一个阻塞数据库调用):
sObservable
.map(turnSIntoAFn) // <-- Actually more complex
.map(a -> {
store(a);
return a;
})
.map(turnAIntoTFn) // <-- Actually more complex
.subscribe(...);
Run Code Online (Sandbox Code Playgroud)
然后我想我应该将我的副作用限制在订阅者身上.这会让我遇到以下任何一种情况:
将Observable转换为Observable,然后订阅将这些A抛出到数据库中的订阅者.然后查询数据库,在Observable中获取A(对于MongoDB的Rx驱动程序很好),将它们转换为T并传递它们(与订阅者一起)
使用源Observable,同时做两件事:
目前,第一个选项看起来更具吸引力,尽管它需要比脏版本和第二个替代版本更多的数据库操作.有没有更好的方法来做这种事情(做一些有用的数据,然后传递它),既不会对资源造成更大的压力,也不会改变我职能之外的状态?
rx-java ×1