随着RxJava的出现,Ive习惯于返回我的存储库,返回可观察到的数据,这些数据会在发生基础更改时自动更新。我只需在存储库中有一个主题就可以收到有关更改信息的通知,而像getAll()
这样的可观察对象就可以做到这一点。
以一个示例为例,使用以下伪代码:
fun getAll(): Observable<List<Model> {
subject
.filter { isChangeRelevant(it) }
.startWith(initialChangeEvent)
.map { queryAll() }
}
我很好奇仅使用协程如何以及是否可以实现同一目的?
答案 0 :(得分:0)
您可以使用Channel
的Kotlin协程。
如果只希望像流一样发出值(因此可以for-each
),则可以使用produce
创建它们(返回ReceiveChannel
):
fun test(): ReceiveChannel<Int>{
return produce {
send(1)
send(5)
send(100)
}
}
您可以对consumeEach
的值使用for-each(或test()
)来接收其值。
如果您希望您的频道与RxJava的PublishSubject完全一样,则可以使用ConflatedBroadCastChannel并向其发出值:
val broadCastChannel = ConflatedBroadcastChannel<Int>()
您可以使用broadCastChannel.offer(value)
将值发送到通道。
要从通道接收值,可以使用简单的for-each循环:
for (i in broadCastChannel.openSubscription()) {
//your values
}