

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 分页
<a name="pagination"></a>

当有效载荷太大而无法在单个响应中返回时，许多 AWS 操作都会返回分页结果。 适用于 Kotlin 的 AWS SDK 包括对服务客户端界面的[扩展](https://kotlinlang.org/docs/extensions.html)，可自动为您对结果进行分页。您只需编写处理结果的代码。

分页<T>以 [Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/) 的形式公开，因此您可以利用 Kotlin 对异步集合的惯用变换（例如`map`、和）。`filter` `take`异常是透明的，这使得错误处理感觉就像是常规的 API 调用，取消遵循协程的一般合作取消。有关更多信息，请参阅官方指南中的[流程](https://kotlinlang.org/docs/flow.html)[和流程异常](https://kotlinlang.org/docs/flow.html#flow-exceptions)。

**注意**  
以下示例使用 Amazon S3。但是，对于任何具有一个或多个分页 APIs的服务，其概念都是一样的。所有分页扩展都是在`aws.sdk.kotlin.services.<service>.paginators`软件包中定义的（例如`aws.sdk.kotlin.services.dynamodb.paginators`）。

以下代码示例显示了如何处理来自 Li [stObjects](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.paginators/list-objects-v2-paginated.html) v2Paginated 函数调用的分页响应。

**导入**

```
import aws.sdk.kotlin.services.s3.S3Client
import aws.sdk.kotlin.services.s3.paginators.listObjectsV2Paginated
import kotlinx.coroutines.flow.*
```

**代码**

```
val s3 = S3Client.fromEnvironment()
val req = ListObjectsV2Request {
    bucket = "amzn-s3-demo-bucket"
    maxKeys = 1
}

s3.listObjectsV2Paginated(req)  // Flow<ListObjectsV2Response>
    .transform { it.contents?.forEach { obj -> emit(obj) } }
    .collect { obj ->
        println("key: ${obj.key}; size: ${obj.size}")
    }
```