kotlin-extensions / io.realm.kotlin/io.realm.RealmResults/toFlow _

toFlow

fun <T : RealmModel> RealmResults<T>.toFlow(): Flow<RealmResults<T>>

返回监控此 RealmResults 变更的Flow 。 订阅时,它将发出当前的 RealmResults。 RealmResults 将在 RealmResults 更新时不断发出 - onCompletion将永远不会被调用。

从 Realm 流发出的项目被冻结 - 请参阅RealmResults.freeze 。 这意味着它们是不可变的,可以从任何线程读取。

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

realmInstance.where(Foo::class.java)
  .findAllAsync()
  .toFlow()
  .map { results -> doExpensiveWork(results) }
  .flowOn(Dispatchers.IO)
  .onEach { flowResults ->
    // ...
  }.launchIn(Dispatchers.Main)

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

val foo = realmInstance.where(Foo::class.java)
  .findAllAsync()
  .toFlow()
  .flowOn(context)
  .first()

返回
可以调用onEachcollect的Kotlin Flow