Graphql 阿波罗缓存正在重置回旧数据

Graphql 阿波罗缓存正在重置回旧数据,graphql,react-apollo,appsync-apollo-client,Graphql,React Apollo,Appsync Apollo Client,我正在使用AWS AppSync和Apollo构建一个Expo移动应用程序,我遇到了一个间歇性但非常严重的问题,缓存被破坏,或者至少没有正确更新。不幸的是,因为我使用的是AppSync,并且我想要离线功能,所以我无法升级到最新的Apollo客户端,因此数据存储在Redux中,有4个顶级键:offline,重新水化,AppSync和AppSync元数据 这就是我期望发生的事情: “项目”的GraphQL查询返回正确的数据 此数据将写入缓存。特别是,我希望在appsync.ROOT\u QUERY中

我正在使用AWS AppSync和Apollo构建一个Expo移动应用程序,我遇到了一个间歇性但非常严重的问题,缓存被破坏,或者至少没有正确更新。不幸的是,因为我使用的是AppSync,并且我想要离线功能,所以我无法升级到最新的Apollo客户端,因此数据存储在Redux中,有4个顶级键:
offline
重新水化
AppSync
AppSync元数据

这就是我期望发生的事情:

  • “项目”的GraphQL查询返回正确的数据
  • 此数据将写入缓存。特别是,我希望在
    appsync.ROOT\u QUERY
    中会有一个项目条目,类似于
    getProject({“input”:{“id”:“project-7”})
    以及
    appsync
    中的顶级条目,用于项目及其所有属性
  • 当我执行一个变异时,我期望项目条目被更新
  • 由于项目已经更新,我希望UI能够刷新以反映更新的数据
  • 大多数情况下,这种情况与上述情况完全相同。但是,缓存有时会发生某些情况。我不确定到底是什么,但它进入了一个奇怪的状态,我无法修复它

    以下是症状:

  • 当我启动应用程序时,缓存被初始化为“旧”状态,该状态不包括对project-7的查询,即使我在关闭应用程序之前刚刚查询过它
  • 当我搜索project-7时,它会将
    getProject…project-7
    查询添加到缓存中,并为project-7添加一个条目,但由于某种原因,它似乎没有包含所有字段
  • 当我进行变异时,会有一个
    AAS\u WRITE\u缓存
    ,它实际上会从查询缓存中删除
    getProject…project-7
    条目!不过,变异成功了,我可以看到AppSync服务器中的数据已经更新,客户端不会在任何地方记录任何错误
  • UI不会更新
  • 我尝试将
    update
    添加到变异中,以便我可以自己更新缓存,但是当我执行
    const data=proxy.readQuery({query:ProjectQuery}…
    (指定
    project-7
    )时,它抛出一个异常,表示找不到该查询,因此我无法更新该项目。如果我手动重新获取项目,那么在下一次变异之前,一切都会重新工作

    真正困难的是,一旦我的应用程序处于这种状态,我就无法解决如何修复它。我尝试了
    client.resetStore()
    ,但它只是被重新水化了。我尝试调用
    AsyncStorage.clear()
    ,然后停止应用程序并重新启动它,但这也不起作用。这怎么可能?它在哪里存储数据

    值得一提的是,在我测试过的大多数设备(包括Android和iOS)上,它都能正常工作几天,没有任何问题,但在一台Android设备上,尤其是在一台Android设备上,它每天或两天都会发生一次。我已经两次能够使用React本机调试器中的“Clear Async storage”来修复它,但现在即使这样似乎也无法修复它

    因此,以下是我的问题:

  • 有人能提出是什么导致缓存进入这种奇怪的状态吗?或者我怎样才能找到问题所在
  • 它在哪里存储然后放回的数据?
    appsync metadata
    中有缓存的快照,但当我清除所有异步存储时,它们肯定也应该被删除
  • 我真的被卡住了

    以下是我正在使用的相关(我认为)软件包:

        "apollo-client": "^2.5.1",
        "aws-amplify": "^1.1.27",
        "aws-amplify-react-native": "^2.1.11",
        "aws-appsync": "^1.7.2",
        "aws-appsync-react": "^1.2.7",
        "expo": "^33.0.0",
        "graphql": "^14.3.0",
        "graphql-tag": "^2.10.1",
        "react": "16.8.3",
        "react-apollo": "^2.5.8",