ApolloGraphQL - Ошибка ReadQuery «Поле не найдено»? - PullRequest
0 голосов
/ 10 июня 2018

Мой readQuery возвращает ошибку field not found, даже если кажется, что поле присутствует в кэше.

QUERY

const GETIMSFROMCACHE_QUERY = gql`
query getIMsFromCache($fromID: String!){
  instant_message(fromID:$fromID){
    id,
    fromID,
    toID,
    msgText
  }
}  `;

CACHE RESOLVER

client.cache.cacheResolvers = {
    Query: {
        instant_message: (_, args) => toIdValue(client.dataIdFromObject({
            __typename: 'instant_message',
            id: args.id
        })),
    },
};

ВЫЗОВ РЕАКТОРА, ОБНОВЛЕНО

let instant_message = cache.readQuery({ query: GETIMSFROMCACHE_QUERY, variables: {"fromID": fromID} });

ОШИБКА

Error: Can't find field instant_message({"fromID":"ayqNLcA7c6r8vip3i"}) on object (ROOT_QUERY) {
  "getMyUserData({\"id\":\"ayqNLcA7c6r8vip3i\"})": [
    {
      "type": "id",
      "generated": false,
      "id": "MyUserData:ayqNLcA7c6r8vip3i",
      "typename": "MyUserData"
    }
  ],
  "getMyUserData({\"id\":\"9W95z8A7Y6i34buk7\"})": [
    {
      "type": "id",
      "generated": false,
      "id": "MyUserData:9W95z8A7Y6i34buk7",
      "typename": "MyUserData"
    }
  ],
  "Appts({\"originatingUserID\":\"ayqNLcA7c6r8vip3i\"})": [],
  "instant_message({\"fromID\":\"ayqNLcA7c6r8vip3i\",\"toID\":\"9W95z8A7Y6i34buk7\"})": [
    {
      "type": "id",
      "generated": false,
      "id": "instant_message:126",
      "typename": "instant_message"
    },
    {
      "type": "id",
      "generated": false,
      "id": "instant_message:127",
      "typename": "instant_message"
    },
    {
      "type": "id",
      "generated": false,
      "id": "instant_message:128",
      "typename": "instant_message"
    }
  ]
}.

Глядя на сообщение об ошибке, кажется, что на объекте ROOT_QUERY присутствует объект instant_message с идентификатором целевого пользователя, но я получаю эту ошибку.

Как я могу исправить это?

Заранее спасибо всем за любую информацию.

1 Ответ

0 голосов
/ 10 июня 2018

Решено!Это было непросто, потому что обычный распознаватель для исходного запроса возвращает любое мгновенное сообщение, равное или от любого из двух пользователей.Средство распознавания возвращает любые мгновенные сообщения от fromID до toID, или наоборот .

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

В конце концов я понял, что кешу безразлично, что произошло в преобразователе - он будет хранить объекты instant_message как от fromID до toID, независимо от того, что произошло вresolver.

Как только я это понял, я отбросил специальный запрос распознавателя кеша и просто использовал исходный запрос, который сначала извлекал Instant_messages, с теми же переменными запроса, которые использовались с ним в первую очередь, иэто сработало.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...