Я пытаюсь реализовать response-apollo с apollo-link-rest, и все кажется замечательным, кроме обработки ошибок и refetchQueries.
Кажется, что если запрос идет с ошибкой, то получаю отказ от подписки.
Я пытался сделать почти все: использовать awaitRefetchQueries или apollo-link-error, но я всегда получал это в консоли после ошибки refetchedQuery:
bundle.esm.js:76 Uncaught (in promise) Error: Network error: Response not successful: Received status code 500
at new ApolloError (bundle.esm.js:76)
at bundle.esm.js:1556
at bundle.esm.js:1977
at Set.forEach (<anonymous>)
at bundle.esm.js:1975
at Map.forEach (<anonymous>)
at QueryManager.broadcastQueries (bundle.esm.js:1973)
at bundle.esm.js:1451
Чем, даже если следующийответ - 200, мой компонент не обновляется.
запрашивает мутацию, являются основами
export const emplacement = gql`
query emplacement {
emplacement @rest(type: "Emplacement", path: "/emplacement") {
id
data
}
}
`
export const completeEmplacement = gql`
mutation completeEmplacement($body: Data!) {
completeEmplacement(body: $body)
@rest(
type: "Emplacement"
path: "/emplacement"
method: "POST"
bodyKey: "body"
) {
msg
}
}
`
И мои компоненты тоже:
import React from "react";
import "./gql/types";
import { emplacement } from "./gql/queries";
import { completeEmplacement } from "./gql/mutations";
import { Mutation, Query } from "react-apollo";
export const MutationButton = () => {
return (
<Mutation mutation={completeEmplacement}>
{(mutate, { error, data }) => {
return (
<>
<h3> MUTATION VALUE </h3>
<p> {JSON.stringify(data)}</p>
<p style={{ color: "red" }}> {JSON.stringify(error)} </p>
<button
onClick={() =>
mutate({
variables: { body: { id: "1", nome: "ciao" } },
refetchQueries: [{ query: emplacement }],
awaitRefetchQueries: true
})
}
>
complete
</button>
</>
);
}}
</Mutation>
);
};
export const QueryResult = () => {
return (
<>
<Query query={emplacement}>
{({ data, loading, error }) => {
if (loading) return "....loading";
const { emplacement = {} } = data || {};
return (
<div>
<h3> QUERY VALUE </h3>
<p> {JSON.stringify(emplacement)}</p>
<p style={{ color: "red" }}>{JSON.stringify(error)}</p>
</div>
);
}}
</Query>
</>
);
};
IОжидается, что мой запрос обновления каждый раз получает новый ответ от сервера, даже после мутации.
Вместо этого, если запрос завершается ошибкой, мой компонент QueryResult не обновляется, даже если следующий ответ идет 200.