Как использовать параметр «nextToken» для проверки пагинации? - PullRequest
0 голосов
/ 24 сентября 2019

Я работаю с образцом запроса graphql, который я хочу дополнительно связать с объектом FlatList в приложении React-Native.Но я все еще пытаюсь понять, что мне следует передать затем параметру nextToken, чтобы получить фрагмент объектов, предназначенных для второй страницы ...

Попытка передать следующий или последний идентификатор или индекс, но этоне сработало - он просит предоставить действительный 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."
    }
  ]
}

Я ожидал получить список из 3 итенов, хранящихся в «Растениях», начиная с «Апельсинового дерева» и далее.... Может ли кто-нибудь пролить свет на это?

1 Ответ

0 голосов
/ 28 сентября 2019

nextToken - это строка, которую вы получаете в ответе при отправке запроса, выглядит как

и не имеет никакого отношения к вашей таблицеключи.

Позвольте мне объяснить, как это работает:

  1. Когда вы отправляете запрос в первый раз, вы не отправляете nextToken, так как вы нене получить его, а затем вы получите первую часть ваших данных.Когда вы получите эту первую порцию, если существует больше данных, вы получите nextToken в ответе.

  2. Теперь у вас есть nextToken, вы отправляете еще один запрос, чтобы получить 2-йчасть ваших данных.Вы должны отправить этот токен в запросе, чтобы ваш сервер знал, с чего начать.

  3. Вы получите вторую порцию данных и новый nextToken, если еще есть данные дляполучить (тогда вам нужно повторить шаг 2) или null в nextToken, если данных больше нет.

Я надеюсь, что теперь все ясно

...