Apollo:获取查询中某些过滤器的陈旧数据

时间:2019-03-25 12:19:10

标签: angular graphql apollo apollo-client

我在这里面临一个非常奇怪的问题。

我们有一个graphql搜索查询,它接受过滤器并提供项目列表。 查询是这样的

allOpportunityV2(only: String, page: Int, per_page: Int, q: String,
  with: String, sort: String, filters: OpportunityFilter): OpportunityList

OpportunityFilter是一个具有类似过滤器选择的对象

{
  duration: RangeInput,
  home_mcs: [Int],
  programmes: [Int]
}

当我进行此查询时,对于某些过滤器组合,即使以前已查询过apollo,它也会发出网络请求,并且我在“网络”标签中得到了正确的响应,但是在apollo的成功方法中,我没有得到正确的反应。

预期结果:

查询成功后获得正确的响应

实际结果:

{
data: undefined
loading: false
networkStatus: 7
stale: true
}

对于某些组合,它只是随机发生的,很难准确再现。

1 个答案:

答案 0 :(得分:0)

如此处https://github.com/apollographql/apollo-client/issues/3030#issuecomment-448472845

所述
  

经过数次跟踪之后,我发现只要有   投影结果中缺少字段。例如,如果我们   应该查询以下用户:user { uuid email picture },并针对   由于某种原因,服务器未返回字段picture,因此结果将为   是:

     

{ data: null loading: false networkStatus: 7 stale: true }

     

我也注意到我们会在   控制台。

     

在我的特定情况下,后端从不序列化null值。以来   用户的图片和许多其他字段是可选的(可为空),我们   不断面对这个问题。

这几乎总是后端服务器的问题。即使任何特定字段的数据为空,您也必须仔细序列化响应中的所有内容。这为我们解决了问题。