Мой readQuery возвращает ошибку field not found, хотя кажется, что поле присутствует в кеше.
ЗАПРОС
const GETIMSFROMCACHE_QUERY = gql`
query getIMsFromCache($fromID: String!){
instant_message(fromID:$fromID){
id,
fromID,
toID,
msgText
}
} `;
КЭШ-РЕЗОЛЬВЕР
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 с целевым идентификатором пользователя, но я получаю эту ошибку.
Как я могу это исправить?
Заранее спасибо всем за любую информацию.


Решено! Это было сложно, потому что обычный преобразователь для исходного запроса возвращает любой IM, который находится в или же от любого из двух пользователей. Резолвер возвращает все мгновенные сообщения от fromID и к toID, или наоборот.
Поэтому я подумал, что мне нужен какой-то преобразователь кеша, чтобы повторить это при запросе кеша.
В конце концов я понял, что кеш-память не заботится о том, что произошло в резолвере - он будет хранить объекты Instant_message как от fromID, так и от toID, независимо от того, что произошло в резолвере.
Как только я понял это, я отбросил специальный запрос преобразователя кеша и просто использовал исходный запрос, который в первую очередь извлекал Instant_messages с теми же переменными запроса, которые использовались с ним в первую очередь, и это сработало. :)