Apollo: получение устаревших данных true для некоторых фильтров в запросе

#angular #graphql #apollo #apollo-client

#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. У меня та же проблема. Вы нашли какое-либо решение для этого?

Ответ №1:

Как описано здесь https://github.com/apollographql/apollo-client/issues/3030#issuecomment-448472845

После нескольких трасс я понял, что данные всегда равны нулю всякий раз, когда в прогнозируемом результате отсутствуют поля. Например, если мы должны запросить пользователя типа: user { uuid email picture } и по какой-то причине сервер не возвращает поле picture , то результат будет:

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

Я также заметил, что мы получим предупреждение об отсутствии изображения поля на консоли.

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

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