ApolloGraphQL - Ошибка ReadQuery "Поле не найдено"?
Мой 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
})),
},
};
READQUERY CALL, ОБНОВЛЕНИЕ
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"
}
]
}.
Глядя на сообщение об ошибке, кажется, instant_message
объект присутствует в объекте ROOT_QUERY с целевым идентификатором пользователя, но я получаю эту ошибку.
Как я могу это исправить?
Спасибо всем заранее за любую информацию.
1 ответ
Решено! Это было непросто, потому что обычный распознаватель для исходного запроса возвращает любое мгновенное сообщение от одного или двух пользователей. Средство распознавания возвращает любые Instant_Messages, которые из fromID
и к toID
или наоборот.
Поэтому я подумал, что мне нужен какой-то определитель кэша, чтобы повторить это при запросе кеша.
В конце концов я понял, что кеш не заботится о том, что произошло в распознавателе - он будет хранить объекты instant_message как fromID
и к toID
независимо от того, что произошло в резольвере.
Как только я понял это, я отбросил специальный запрос распознавателя кеша и просто использовал исходный запрос, который сначала извлекал Instant_messages, с теми же переменными запроса, которые использовались с ним в первую очередь, и он работал.:)