代码之家  ›  专栏  ›  技术社区  ›  Sermilion

rxjava2+Room事务:返回两个RxJava操作的事务中的单个一次性事务

  •  0
  • Sermilion  · 技术社区  · 6 年前

    我正在使用Room数据库和RxJava。 我需要从表中删除所有记录,然后插入一组新的条目。

    一种方法是:

    @Transaction
    fun clearAndInsert(records: List<Whatever>): Disposable {
        deleteRecords()
        insertRecords(records)
    }
    

    deleteRecords() 返回一次性 insertRecords() 不过,我想从这个方法返回一个一次性的。虽然我可以返回一个合成的可分解的。

    @Transaction
    override fun clearAndInsertTags(records: List<Whatever>): Disposable {
        return Observable.fromCallable { subscriptionsDao.deleteRecords() }
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({
                    insertRecords(records)
                })
    }
    

    这将返回一个一次性的。然而,这是交易吗?不管什么原因, insertRecords() 失败并调用onError。房间真的会为我恢复删除所有记录吗?如果没有,正确的方法是什么?或者是返回一个 CompositeDisposable 这条路对吗?

    0 回复  |  直到 6 年前