Клиент Apollo 3: запрос возвращает результаты на вкладке Сеть Chrome, но не определен в моем приложении

#react-apollo #apollo-client

#реагировать-apollo #apollo-client

Вопрос:

Я извлекаю некоторые данные, используя @apollo/client v3. На вкладке сети Chrome (результаты http) я вижу, что он возвращает данные и ошибки (я не беспокоюсь об ошибке, я знаю, почему это происходит прямо сейчас.):

 {
    data: {workItems: [,…]},…},
    errors: [{message: "Error trying to resolve position."
}
  

Однако в моем приложении data возвращает undefined.

Вот конфигурация моего клиента:

 export const graphqlClient = new ApolloClient({
    cache: new InMemoryCache(),
    link: ApolloLink.from([
        onError(({ graphQLErrors, networkError }) => {
            if (graphQLErrors) {
                graphQLErrors.forEach(error =>
                    console.log(
                        `[GraphQL error]: ${JSON.stringify(error, null, 2)}`
                    )
                )
            }
            if (networkError) {
                console.log(`[Network error]: ${networkError}`)
            }
        }),
        apolloLink
    ])
})
  

И мой запрос:

 gql`
    query WorkItems($ppm: String) {
        workItems(where: { ppm: $ppm }) {
            ...WorkItemKanban
        }
    }
    ${workItemFragment.workItemKanban}
`

const useWorkItemListDataGraphql = (args: {
    query: DocumentNode
    variables: { parent: string } | { ppm: string }
}) => {
    const { variables, query } = args
    const { data, error, loading, refetch } = useQuery<
        { workItems: WorkItem[] },
        { parent: string } | { ppm: string }
    >(query, {
        pollInterval: 180000,
        variables
    })
  
    // data returns undefined, but error shows the same error as in Chrome's network tab
    return { ...data, error, loading, refetch }
}
  

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

Ответ №1:

Как описано в документации Apollo — Политики ошибок

По умолчанию политика ошибок рассматривает любые ошибки GraphQL как сетевые ошибки и завершает цепочку запросов

следовательно, по умолчанию клиент Apollo возвращает undefined , если есть ошибка.

Добавление errorPolicy: 'all' в параметры запроса или в параметры клиента по умолчанию решает проблему.

Пример:

 const { loading, error, data } = useQuery(MY_QUERY, { errorPolicy: 'all' });
  

Комментарии:

1. В моем случае я продолжаю видеть errors на вкладке сети dev tools, но мой запрос errors возвращает undefined даже с errorPolicy: 'all' . Возможно, есть какая-то другая скрытая настройка …?