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

tom*_*cak 2 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
  }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*don 5

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

以以下示例查询为例:

{
  viewer {
    id
    fullName
    groups {
      id
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

User:asidnajksduih6
Group:9p8h2uidbjqshd
Group:d9a78h92lnasax
Run Code Online (Sandbox Code Playgroud)

如果后续查询如下所示:

{
  viewer {
    id
    fullName
    groups {
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

解决方案似乎是尽可能在您的查询中始终使用 id。这避免了合并问题,并提高了后续无关查询发生缓存命中的机会。

以上描述了原因和解决方案。此问题的可能症状包括:呈现陈旧数据,或即使结果在您的缓存中也不呈现数据。正如这里所指出的,这些错误是默默发生的,但是可以通过“查询”选项卡中的Apollo chrome 扩展程序看到它们。