异步流
一、流构建器
fun simple(): Flow<Int> = flow {
for (i in 1..3) {
delay(100)
emit(i)
}
}
simple().collect { value -> println(value) }
- 2.流使用 emit 函数发射值。
- 3.流使用 collect 函数收集值。
- 4.flow 构建器中的代码直到流被收集的时候才运行。
二、其他类型的流构建器
- 1.flowOf 构建器定义了一个发射固定值集的流。
- 2.使用 .asFlow() 扩展函数,可以将各种集合与序列转换为流。
三、流取消基础
- 1.流的收集可以在当流在一个可取消的挂起函数(例如 delay)中挂起的时候取消。
四、过渡流操作符
-
- 就像使用集合与序列一样。 过渡操作符应用于上游流,并返回下游流。 这些操作符也是冷操作符,就像流一样。
这类操作符本身不是挂起函数。它运行的速度很快,返回新的转换流的定义。
-
- map操作符
suspend fun performRequest(request: Int): String {
delay(1000)
return "response $request"
}
fun main() = runBlocking<Unit> {
(1..3).asFlow()
.map { request -> performRequest(request) }
.collect { response -> println(response) }
}
五、转换操作符
-
- 在流转换操作符中,最通用的一种称为transform。它可以用来模仿简单的转换,例如 map 与 filter,以及
实施更复杂的转换。 使用transform操作符,我们可以 发射 任意值任意次。