@apollo/client useLazyQuery .then() срабатывает даже при наличии ошибки (React/graphene-django)

У меня есть бэкенд на graphene-django с запросом me, который возвращает исключение: You do not have permission to perform this action если пользователь не вошел в систему.

Из React я вызываю запрос следующим образом:

const [getMe] = useLazyQuery(ME_QUERY); // query not important

React.useEffect(() => {
  getMe()
    .then((meRes) => {
      console.log('Hit the .then()');
      if (meRes.data && meRes.data.me) {
        setUser(meRes.data.me);
      }
    })
    .catch(() => {
      console.log('Hit the .catch()');
    });
}, [])

Ответ, который я получаю от бэкенда:

{"errors":[{"message":"You do not have permission to perform this action","locations":[{"line":2,"column":3}],"path":["me"]}],"data":{"me":null}}

Я ожидал, что @apollo/client распознает это как ошибку и моя консоль выведет Hit the .catch(), но по какой-то причине он вообще не попадает в catch и выводит только Hit the .then().

Почему в @apollo/client этот ответ разрешается, а не отклоняется? У меня такая проблема только с запросами, а не с мутациями, которые работают как ожидалось. Например, если я вызову эту мутацию:

const [createUser, { data, loading, error }] = useMutation(CREATE_USER_MUTATION);

createUser({
  variables: {
    email,
    password1,
    password2,
  },
}).then(() => {
  console.log('this should not be hit');
});

И я получаю такой ответ:

{"errors":[{"message":"['This password is too short. It must contain at least 8 characters.', 'This password is too common.']","locations":[{"line":2,"column":3}],"path":["createUser"]}],"data":{"createUser":null}}

@apollo/client правильно распознает это как ошибку, и this should not be hit не отобразится в консоли, хотя и запрос, и мутация возвращают код состояния 200.

Любая помощь в понимании того, почему useLazyQuery неправильно выполняет .then(), а useMutation правильно выполняет .catch(), была бы очень признательна. При необходимости я могу предоставить больше объяснений со стороны Django или React.

Вернуться на верх