У меня в AWS AppSync очень простая структура схемы, использующая DynamoDB в качестве бэкэнда.
type Demo {
id: ID!
name: String!
date: String!
}
type DemoConnection {
items: [Demo]
nextToken: String
}
input ListFilter {
limit: Int
nextToken: String
}
И у меня есть этот запрос, чтобы перечислить все демонстрации
listAllDemo(input: ListFilter): DemoConnection
Для чего резолверы выглядят как -
{
"version" : "2017-02-28",
"operation" : "Scan",
"limit": #if ($context.arguments.limit) $context.arguments.limit #else 10 #end,
"nextToken": #if ($context.arguments.input.nextToken) "$context.arguments.input.nextToken" #else null #end
}
И шаблон сопоставления ответов как
{
"items": $util.toJson($context.result.items),
"nextToken": $util.toJson($context.result.nextToken)
}
Я создал около 13 записей для тестирования "nextToken". Он вернул токен вместе с 10 результатами, и я использовал его для получения других результатов.
Есть другой API, который удаляет эти записи из БД. Что происходит, так это то, что даже когда у меня сейчас 7 записей в БД, «listAll» возвращает nextToken, чего не должен, хотя при использовании этого nextToken следующий набор результатов остается пустым.
Я не могу понять, почему я получаю этот nextToken, даже если записей нет.
Приносим извинения за проблемы. Мы просто попытались воспроизвести это, создав образец на основе Amazon DynamoDB. Мы начали с 6 элементов, затем перешли к 12, затем снова к 9, все из которых имели ограничение в 10 элементов. У нас есть ненулевой токен только в 12. Не могли бы вы поделиться некоторыми подробностями о своем прогоне - в частности, скорректировали ли вы количество элементов, ваш API-идентификатор, идентификатор вашего запроса, регион и приблизительную временную метку.
Джефф, я снова воссоздал проблему. На этот раз я проверил 23 записи в DynamoDB. На последней странице идут 3 записи. Удалите эти конкретные записи (не мутацию) и снова запустите запрос GraphQL с токеном (не из этих трех записей), но с предыдущими 11-20 записями. В запросе 11-20 записей я должен получить nextToken null, однако он возвращает мне токен, и хотя при его использовании он возвращает элементы, а nextToken null. Моя проблема связана с токеном, который я получаю после удаления в запросе для 11-20 пронумерованных записей.
Для региона я использую бесплатную пробную версию us-east-2.


Я обнаружил странную вещь: если эти записи удаляются с помощью мутаций AWSAppSync, то обновляется только nextToken. !!!!