Pagination
Provides the ability to separate and traverse through pages of data
Various APIs provide the ability to query results in a paginated form. These APIs will typically have an optional
nextToken
input property to facilitate pagination. By default, if a limit is not provided, or set as undefined/nil/null
, the default limit will be 10.When specifying a large number of records in a query, an upper limit of 1MB is enforced on the data retrieved. If the 1MB limit is hit, the data will be returned as a page and require using the next token of the result to query the next page of results.
The following types support pagination:
- Email Addresses
- Email Messages
- Email Folders
If intending to use pagination, the first call to an API should not include a
nextToken
, otherwise the result will return an error. When a paginated API call is successful, the output response will contain a nextToken
property.When using a query that supports pagination, it is important to always check the
nextToken
. Due to the nature of the data access from the service, it is possible to retrieve a result with no data but potentially have another page of information to retrieve which may contain results.To access the next page of a query API, use the previously returned
nextToken
in the subsequent API call. If a successful response does not return a nextToken
, or it is set to undefined/nil/null
, the pagination results have been exhausted and there are no more pages to retrieve.When using subsequent calls for pagination, ensure that the input information (e.g.
limit
) is the same for each call, otherwise unexpected behavior will occur. For example, if the first call uses an input property of limit = 8
, then each subsequent call must use a limit
of 8
.TypeScript
Swift
Below is an example usage of
getEmailAddresses
for a user with four email addresses and paginating through the results:const output: EmailAddress[] = []
let nextToken: string | undefined = undefined
try {
do {
const listOutput = await emailClient.listEmailAddresses({
cachePolicy: CachePolicy.RemoteOnly,
limit = 2,
nextToken, // `undefined` on first invocation
})
output.push(...listOutput.items)
nextToken = listOutput.nextToken
} while (nextToken)
} catch {
// Handle/notify user of errors
}
The first iteration of the
do...while
loop will have the listOutput
return an array of items
containing two EmailAddress
objects, as well as a populated nextToken
which is used in the subsequent call in the next iteration. The second iteration will have the listOutput
return an array of items
containing two EmailAddress
objects, however the nextToken
will be undefined
as there are no more objects for the query to fetch.Below is an example usage of
listEmailAddresses
for a user with 4 email addresses:var output: ListOutput<EmailAddress>?
var input = ListEmailAddressesInput(limit: 2, nextToken: nil)
do {
output = try await emailClient.listEmailAddresses(withInput: input)
/*
* This output will contain an `items` array of 2 Email Address objects, as
* well as a non-`nil` `nextToken` which is used in the subsequent call.
*/
input = ListEmailAddressesInput(limit: 2, nextToken: output.nextToken)
output = try await emailClient.listEmailAddresses(withInput: input)
/*
* This output will also contain 2 Email Address objects in the `items` array, however the
* `nextToken` will be `nil`, as there are no more objects for the user to
* fetch.
*/
} catch {
// Handle/notify user of errors
}
Last modified 6mo ago