Запрос Apollo GraphQL перезаписывает массив подэлементов другим запросом

У меня есть два запроса о типах категорий компании. Запрос сотрудника включает в себя подмножество типов запросов компании в базе данных. Если я просто запрашиваю запрос сотрудника, массив типов сотрудников включает 2 элемента. Если я просто запрошу запрос компании, массив типов компаний будет включать 4 элемента. Что ж ... Но если я запрашиваю оба, массив типов сотрудников обновляется и внезапно включает 4 элемента вместо 2.

query GetEmployee ($id: ID!) {
employee (id: $id) {
  id,
  companyTaskCategories{
      id,
      title,
      color,
      archived,
      types(restrictEmployee: true)  {
        id,
        title,
        archived,
      }
  }
}


query company {
company {
  id,
  taskCategories {
    id,
    title,
    color,
    archived,
    types(restrictEmployee: false) {
      id,
      title,
      archived,
    }
  }
}

}


person Peter    schedule 08.05.2018    source источник


Ответы (1)


Не уверен, как вы реализовали свои функции преобразователя, но если вы хотите выполнить два запроса и получить изолированные результаты, используйте мутации, так как это гарантирует, что ваши запросы не будут создавать условия гонки на бэкэнде.

Поэтому используйте мутацию для последовательного извлечения данных.

Как указано в http://graphql.org/learn/queries/

В то время как поля запроса выполняются параллельно, поля мутации выполняются последовательно, одно за другим.

person Rahul Khandelwal    schedule 08.05.2018
comment
На самом деле проблема в том, что apollo объединяет ответы подэлементов типов, но типы сотрудников - это отфильтрованное подмножество массива типов компаний. Apollo предполагает, что элементы были добавлены, и автоматически перезаписывает весь массив типов сотрудников. Обновляются не только существующие элементы, но и вся длина массива при добавлении новых элементов из вызова компании. - person Peter; 08.05.2018