RxJava-同一线程上的flatMap

时间:2018-09-13 17:27:23

标签: rx-java2

我在数据库中嵌套了一些项目,例如房子-房间。如果删除房屋,我也要删除所有房间,但是我不想考虑这个,因此房屋必须知道这一点。所以我的设置看起来像这样:

fun deleteHouse(item: House): Single<House> {
    houseObservable // emits List<House>
        .take(1)
        .map { 
            DBManager.beginTransaction()
            it
        }
        .flatMapIterable { it }
        .flatMapSingle { deleteRoom(it) }
        .toList()
        .map { 
            DBManager.deleteWithoutDependencies(item)
            DBManager.endTransaction()
            item
        }
}

fun deleteRoom(item: Room): Single<Room> {
    roomObservables // emits List<Room>
        .take(1)
        .map { 
            DBManager.beginTransaction()
            it
        }
        .flatMapIterable { it }
        .flatMapSingle { DBManager.deleteWithoutDependencies(item) }
        .toList()
        .map { 
            DBManager.endTransaction()
            item
        }
}

问题

每个项目都在RxComputationThread-1上以及每个beginTransactionendTransaction上都被删除,最后一个完成删除操作的endTransaction房子。

我需要在同一线程上运行所有数据库操作,否则数据库将自身锁定...

有什么办法解决这个问题吗?

想法

将用过的Schedular传递给函数并在flatMaps中使用它们,但这真的是解决这个问题所必需的吗?

0 个答案:

没有答案