NextToken в типе запроса queryAll

У меня в 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, даже если записей нет.

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

Avij 04.01.2019 10:49

Приносим извинения за проблемы. Мы просто попытались воспроизвести это, создав образец на основе Amazon DynamoDB. Мы начали с 6 элементов, затем перешли к 12, затем снова к 9, все из которых имели ограничение в 10 элементов. У нас есть ненулевой токен только в 12. Не могли бы вы поделиться некоторыми подробностями о своем прогоне - в частности, скорректировали ли вы количество элементов, ваш API-идентификатор, идентификатор вашего запроса, регион и приблизительную временную метку.

Jeff Bailey 09.01.2019 01:11

Джефф, я снова воссоздал проблему. На этот раз я проверил 23 записи в DynamoDB. На последней странице идут 3 записи. Удалите эти конкретные записи (не мутацию) и снова запустите запрос GraphQL с токеном (не из этих трех записей), но с предыдущими 11-20 записями. В запросе 11-20 записей я должен получить nextToken null, однако он возвращает мне токен, и хотя при его использовании он возвращает элементы, а nextToken null. Моя проблема связана с токеном, который я получаю после удаления в запросе для 11-20 пронумерованных записей.

Avij 10.01.2019 07:03

Для региона я использую бесплатную пробную версию us-east-2.

Avij 10.01.2019 07:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
4
241
0

Другие вопросы по теме