Flow onEach,但在排放到下游后执行

问题描述 投票:0回答:1

Flow 的

onEach
文档说:

返回一个在上游流的每个值向下游发出之前调用给定操作的流。

有没有办法做到同样的事情,但是

after上游流的每个值都被发送到下游?最好不使用 delay(long)

.

kotlin kotlin-flow
1个回答
0
投票

Flow

确实是一个非常简单的界面,因此我们可以轻松地自己创建这样的运算符。我们唯一需要做的就是收集上游流,对于每个项目,首先将其发送到下游流,然后调用提供的操作:

fun <T> Flow<T>.onEachAfter(action: suspend (T) -> Unit): Flow<T> = object : Flow<T> { override suspend fun collect(collector: FlowCollector<T>) { [email protected] { collector.emit(it) action(it) } } }
我们可以通过使用方便的 

transform 运算符作为我们的构建块来使其变得更简单:

fun <T> Flow<T>.onEachAfter(action: suspend (T) -> Unit): Flow<T> = transform { emit(it) action(it) }
用途:

suspend fun main() { flowOf(1, 2, 3) .onEachAfter { println("On each after: $it") } .collect { println("Collect: $it") } } ---------------- Collect: 1 On each after: 1 Collect: 2 On each after: 2 Collect: 3 On each after: 3
    
© www.soinside.com 2019 - 2024. All rights reserved.