首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ApolloGraphQL -- ReadQuery `字段不成立`错误?

ApolloGraphQL -- ReadQuery `字段不成立`错误?
EN

Stack Overflow用户
提问于 2018-06-10 07:20:11
回答 1查看 599关注 0票数 1

我的readQuery返回了一个field not found错误,即使该字段似乎存在于缓存中。

查询

代码语言:javascript
复制
const GETIMSFROMCACHE_QUERY = gql`
query getIMsFromCache($fromID: String!){
  instant_message(fromID:$fromID){
    id,
    fromID,
    toID,
    msgText
  }
}  `;

缓存解析器

代码语言:javascript
复制
client.cache.cacheResolvers = {
    Query: {
        instant_message: (_, args) => toIdValue(client.dataIdFromObject({
            __typename: 'instant_message',
            id: args.id
        })),
    },
};

更新中的READQUERY调用

代码语言:javascript
复制
let instant_message = cache.readQuery({ query: GETIMSFROMCACHE_QUERY, variables: {"fromID": fromID} });

错误

代码语言:javascript
复制
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对象上似乎存在一个具有目标用户id的instant_message对象,但我得到了这个错误。

我怎样才能纠正这个错误呢?

提前感谢所有人的任何信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 10:05:40

解决了!这很棘手,因为原始查询的常规解析器会从两个用户中的任何一个返回到的任何IM。解析器返回来自fromIDtoID或相反的的任何instant_messages。

所以我想我需要某种缓存解析器来在查询缓存时重复这个过程。

最终,我意识到缓存并不关心解析器中发生了什么--它将把instant_message对象存储为来自fromIDtoID的对象,而不管解析器中发生了什么。

一旦我意识到这一点,我就放弃了特殊的缓存解析器查询,只使用最初检索instant_messages的原始查询,以及最初使用的相同查询变量,它就起作用了。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50779328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档