Клиент Apollo: Ошибка сети {"type": "WriteError"} - PullRequest
0 голосов
/ 12 октября 2018

Я получаю Network Error {"type":"WriteError"} по моему запросу apollo.Запрос выполняется так же хорошо, как и приходит к клиенту.Но есть проблема, пишущая это, он хранит.Любые идеи, что может пойти не так?Это запрос:

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 голосов
/ 14 июня 2019

Я сам столкнулся с этим и нашел решение здесь .Это происходит потому, что запрос загружает данные без идентификатора (или идентификаторов), которые затем нельзя объединить с существующими данными в кэше.

Возьмите следующий пример запроса:

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

Возвращенные данные будут сохранены в кеше с одной записью для зрителя и одной записью на группу:

User:asidnajksduih6
Group:9p8h2uidbjqshd
Group:d9a78h92lnasax

Если последующий запрос будет выглядеть так:

{
  viewer {
    id
    fullName
    groups {
      name
    }
  }
}

Там может бытьбыть конфликтом, потому что неясно, какие группы должны обновляться в кэше (результирующий набор не будет включать идентификаторы групп).

Решение, как представляется, заключается в том, чтобы всегда использовать идентификаторы в ваших запросах, где это возможно.Это позволяет избежать проблемы слияния и повышает вероятность того, что последующие несвязанные запросы попадут в кэш.

Выше описаны причина и решение.Возможные симптомы этой проблемы включают в себя: рендеринг устаревших данных или рендеринг данных, даже если результаты находятся в вашем кэше.Как указано здесь , эти ошибки происходят тихо, однако их можно увидеть через расширение Apollo chrome на вкладке "запросы".

0 голосов
/ 14 декабря 2018

Фрагмент BpmnProcessInstanceItemTask , если он перекрывает существующий объект tasks через поле __typename.То же самое в этом коде:

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