

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

當承載太大而無法在單一回應中傳回時，許多 AWS 操作會傳回分頁結果。 適用於 Kotlin 的 AWS SDK 包含服務用戶端界面[的延伸](https://kotlinlang.org/docs/extensions.html)，可為您自動分頁結果。您只需要撰寫處理結果的程式碼。

分頁會公開為 [Flow<T>](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/)，因此您可以利用 Kotlin 的非同步集合的慣用轉換 （例如 `map`、 `filter`和 `take`)。例外情況是透明的，這使得錯誤處理感覺像是一般 API 呼叫，而取消遵守一般合作取消 coroutine。如需詳細資訊，請參閱官方指南中的[流程](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`)。

下列程式碼範例示範如何從 [listObjectsV2Paginated](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.paginators/list-objects-v2-paginated.html) 函數呼叫處理分頁回應。

**匯入**

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

**Code**

```
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}")
    }
```