Apollo客户端:网络错误{“ type”:“ WriteError”}

时间:2018-10-12 06:14:33

标签: apollo react-apollo apollo-client

我在阿波罗查询中得到Network Error {"type":"WriteError"}。查询执行得很好,并且到达了客户端。但是在将其写入存储时存在问题。任何想法有什么问题吗?这是查询:

fragment BpmnProcessInstanceItemTask on BpmnTaskInstance {
  id
  dateStarted
  dateFinished
  task {
    name
    __typename
  }
  performer {
    name
    __typename
  }
  performerRoles
  __typename
}

fragment BpmnProcessInstanceItem on BpmnProcessInstance {
  id
  status
  process {
    name
    description
    type
    __typename
  }
  owner {
    name
    __typename
  }
  tasks {
    ...BpmnProcessInstanceItemTask
    __typename
  }
  dateStarted
  dateFinished
  __typename
}

query BpmnProcessInstancesQuery($input: BpmnProcessInstancesInput!) {
  bpmnProcessInstancesQuery(input: $input) {
    ...BpmnProcessInstanceItem
    __typename
  }
}

2 个答案:

答案 0 :(得分:0)

BpmnProcessInstanceItemTask 片段(如果通过__typename字段与现有 tasks 对象重叠)。此代码中相同:

query BpmnProcessInstancesQuery($input: BpmnProcessInstancesInput!) {
  bpmnProcessInstancesQuery(input: $input) {
    ...BpmnProcessInstanceItem
    __typename <-- *same field stored twice*
  }
}

答案 1 :(得分:0)

我自己遇到了这个问题,找到了解决方法here。发生这种情况是因为查询正在加载没有ID(或多个ID)的数据,然后这些ID无法与缓存中的现有数据合并。

执行以下示例查询:

{
  viewer {
    id
    fullName
    groups {
      id
      name
    }
  }
}

返回的数据将存储在缓存中,其中一个用于查看器,一个用于每个组:

User:asidnajksduih6
Group:9p8h2uidbjqshd
Group:d9a78h92lnasax

如果后续查询如下:

{
  viewer {
    id
    fullName
    groups {
      name
    }
  }
}

可能存在冲突,因为尚不清楚应在缓存中更新哪些组(结果集将不包含组ID)。

解决方案似乎是尽可能在查询中始终使用ID。这样可以避免合并问题,并且可以提高后续无关查询出现缓存命中的机会。

  

以上描述了原因和解决方法。此问题的可能症状包括:呈现陈旧数据,或者即使结果在您的缓存中也不呈现任何数据。正如here所指出的那样,这些错误是无声的,但是可以通过“查询”标签中的Apollo chrome extension看到它们。