【问题标题】:Apollo Client: Network Error {"type":"WriteError"}Apollo 客户端:网络错误 {"type":"WriteError"}
【发布时间】:2019-03-17 07:42:49
【问题描述】:

我在阿波罗查询中收到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
  }
}

"

【问题讨论】:

  • 请发布执行查询的代码和完整的错误消息。这将有助于更好地理解问题。

标签: apollo react-apollo apollo-client


【解决方案1】:

我自己也遇到了这个问题,找到了解决方案here。发生这种情况是因为查询正在加载没有 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 看到它们。

【讨论】:

  • 爱你拯救了这一天。
【解决方案2】:

BpmnProcessInstanceItemTask 片段如果通过 __typename 字段与现有 tasks 对象重叠。这段代码也一样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2022-08-02
    • 2017-11-08
    • 1970-01-01
    • 2021-10-12
    • 2019-06-09
    • 2017-09-14
    相关资源
    最近更新 更多