- [参考文档](https://www.kotlincn.net/docs/reference/coroutines/flow.html#%E6%B5%81%E5%8F%96%E6%B6%88%E6%A3%80%E6%B5%8B)
--------------------------------------
## 一、流构建器
- 1. 创建一个流构建器示例
```kotlin
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)中挂起的时候取消。
## 四、过渡流操作符
- 1. 就像使用集合与序列一样。 过渡操作符应用于上游流,并返回下游流。 这些操作符也是冷操作符,就像流一样。
这类操作符本身不是挂起函数。它运行的速度很快,返回新的转换流的定义。
- 2. map操作符
```kotlin
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) }
}
```
## 五、转换操作符
- 1. 在流转换操作符中,最通用的一种称为transform。它可以用来模仿简单的转换,例如 map 与 filter,以及
实施更复杂的转换。 使用transform操作符,我们可以 发射 任意值任意次。
# 异步流
最新推荐文章于 2024-06-21 17:42:51 发布