kotlin-extensions / io.realm.kotlin / toChangesetFlow

toChangesetFlow

fun <T : RealmModel> T?.toChangesetFlow(): Flow<ObjectChange<T>?>

返回监控此 RealmObject 更改的。 它将在订阅时发出当前 RealmObject。 对于 RealmObject 的每次更新,都会发送一个ObjectChange,该 ObjectChange由 RealmObject 及其相应的ObjectChangeSet对组成。 首次发出 RealmObject 时,变更集将为null

RealmObject 在更新时将不断发出。 此流程永远不会完成。

发出的项被冻结(请参阅RealmObject.freeze )。 这意味着它们是不可变的,可以在任何线程上读取。

Realm流始终从持有活动Realm的线程中发出项目。 这意味着,如果需要进行进一步处理,建议在计算调度程序上收集值:

object.toChangesetFlow()
  .map { change -> doExpensiveWork(change) }
  .flowOn(Dispatchers.IO)
  .onEach { change ->
    // ...
  }.launchIn(Dispatchers.Main)

如果您希望toChangesetFlow()停止发出项目,可以通过调用kotlinx.coroutines.flow.first来指示流程仅发出第一项:

val foo = object.toChangesetFlow()
  .flowOn(context)
  .first()

异常

UnsupportedOperationException - 如果所需的协程框架不在类路径上,或者相应的Realm 实例不支持流。

IllegalStateException - 如果 Realm 不是在 事件循环 线程上打开的。

返回
永远不会完成的 Kotlin Flow