如何使用"nextToken"参数来测试分页?

How to use the "nextToken" parameter to test Pagination?

我正在处理一个 graphql 查询示例,我想将其进一步绑定到 React-Native 应用程序中的 FlatList 对象。但我仍在努力理解我应该传递 nextToken 参数的内容,以便将一部分对象发送到第二页...

试图传递下一个或最后一个 ID 或索引,但它没有用 - 它要求我提供有效的 nextToken,我不知道它是什么类型的数据。

我正在 运行 通过 AppSynch 控制台。

我的查询:

query ListResources(
  $nextTokenPlants: String = "Orange Tree"
  $limitPlants: Int = 3
) {
  listResources {
    items {
      id
      name
      Plants(limit: $limitPlants, nextToken:$nextTokenPlants) {
        items {
          id
          name
          filterName
          description
          bath
          tea
          insence
          children
        }
        nextToken
      }
    }
    nextToken
  }
}

这是我得到的结果:

{
  "data": {
    "listResources": {
      "items": [
        {
          "id": "361dee16-d567-41ed-b1d4-9baa4a7ffdcc",
          "name": "Plantas",
          "Plants": null
        }
      ],
      "nextToken": null
    }
  },
  "errors": [
    {
      "path": [
        "listResources",
        "items",
        0,
        "Plants"
      ],
      "data": null,
      "errorType": "DynamoDB:UserIllegalArgumentException",
      "errorInfo": null,
      "locations": [
        {
          "line": 9,
          "column": 7,
          "sourceName": null
        }
      ],
      "message": "com.amazonaws.deepdish.common.pagination.InvalidPaginationTokenException: Invalid pagination token given."
    }
  ]
}

我希望获得存储在 "Plants" 上的 3 个物品的列表,从 "Orange Tree" 开始...任何人都可以解释一下吗?

nextToken 是发送请求时在响应中得到的字符串,类似于

eyJ2ZXJzaW9uIjoxLCJ0b2tlbiI6IkFRSUNBSGdtYVZObHlaR3FSa3hDRnFVWWdFeEZDM0FMY1JRdE9UOEt2dWFLMExzcjJ3RlBPMGdpcC96bjQ5VjFOVElKUng1M0FBQUNlVENDQW5VR0NTcUdTSWIzRFFFSEJxQ0NBbVl3Z2dKaUFnRUFNSUlDV3dZSktvWklodmNOQVFjQk1CNEdDV0NHU0FGbEF3UUJMakFSQkF4VEt5Myt3RUJuSzVSU2hsUUNBUkNBZ2dJc1lmdDk2WVVmQ053Tms2WGkxc3Z2bUgzSGFQZTdNTm1DQWhDcWJ5RFlydXZwTmR6WUNBQ0pJS1RZQlVWdk1xbU9EV2s2SVdLTzlqNmRhenNWZGZYTmFTQmxseE9yUS9BZWY0c2NpL1duWVUweWEyNCthZGQxcVNaMGZEWDZUdkJDak1XQjQ4QmhTQmxLejk2TFpiZ3pDN3dJTzVPRStFbUxHdVhRcURXcUpNZDM3Rm0yNUdiQVU1Tlg1YWVtWE1PbnVKSkZpTzA3U3ZhdUVZMWZwaXZCVU9pMHlxTVlIYk5PMkQ4aDZRVmQ4eW4yTXl3YU9UUHYwWFJZNitrakgvNGlyOWtrdlVXK1pvNFdOeDFBL2h1MlF4Z0lSczQ3d0xTT2NsaXk1Y3o0eFFzM2xqREhYL3M0TTVwT2phTCt0TGpYOUlWcGZCVW45bUgwWEw4ZEFkR0VZRGdjeWpMUHlPdWFnREVNMWR4M09neTg4NGJPclJ3VVgrRmM0UHpGekRqSHZjcjBGSVVXNEM2ZUxzYVRtRjNFakhLRk9ERllDWWkrQ01QNFg0a0dCdTFJQ3BLQjNJdEx2VTZHcUxNVDRMd3NJbkk4SVBhZm1MRnYxRTZDbWxxMnFKZ2wxY1BEVmR6MVFDc0Ezby9vR0VHUkI2VkJtc3VFSUFuOW10OVJzaWpyaklqUm5DQzlSWHA3NnA0WlhWanBJY0dSVU9GTktvZGNnMVpNbGV0a200clhBUGJacFZ5TDdkcnQyTXlEVERQd1crcjZsRHJUUVJJZzI4MEl3Y3ZkQzB1RWRrb0hqTlZPR0kwSWxsSnZ5RjRWTCtNNzRuWXcwNVNSWllJODdGcGdzR21LZjRvWVA1VG9temRVUUR0YWkrZVRJcUxGRjlGYzk0UUNwZlYrVlpmeVU0Mk4yTnRtNi9MYUhrZ08zdGRTUHN1bGhQWVRuMGRQNU5aWG5pODU1eGZyL1N2dDQ2VU0xb3I2UEE9PSJ9

它与您的 table 键无关。

现在让我解释一下它是如何工作的:

  1. 当你第一次发送请求时,你不会发送 nextToken 因为你没有它然后你得到了你的数据的第一部分。 当您收到第一部分时,如果存在更多数据,您会在响应中得到 nextToken

  2. 现在,您 nextToken 发送了另一个请求以获取数据的第二部分。您应该在请求中发送该令牌,以便您的后端知道从哪里开始。

  3. 如果还有一些数据要获取(那么您需要重复步骤 2)或 nullnextToken如果没有更多数据。

我希望现在已经清楚了