Как использовать политику «кеш-и-сеть» в ApolloClient.query () - PullRequest
0 голосов
/ 30 июня 2019

Я создаю приложение, используя ApolloClient для запроса конечной точки GraphQL. Я хочу использовать политику выборки «кеш-и-сеть» для обычных запросов, так как эта конкретная политика работает только для watchQueries. Что я действительно хочу, так это:

  1. Если мы можем запросить сервер, мы получим ответ от сервера.

  2. Если мы не можем запросить сервер, мы загружаем контент из кеша, если он кешируется

Это код, который я использую для создания экземпляра ApolloClient.

const defaultOptions = { 
  watchQuery: {
    fetchPolicy: 'cache-and-network',
    errorPolicy: 'ignore',
  },
  query: {
    fetchPolicy: 'network-only',
    errorPolicy: 'all',
  },
  mutate: {
    errorPolicy: 'all'
  }
}


const client = new ApolloClient({
  cache: cache,
  link: createUploadLink({
    uri: 'http://localhost:3000/graphql',
  }),
  defaultOptions
});

Так что я думаю, что у меня есть два варианта: перехватить первый ответ на запрос и, если не удалось загрузить содержимое из кэша, или использовать метод watchQuery для выдачи запросов.

Я понятия не имею, как это сделать, поэтому любая помощь будет приветствоваться!

1 Ответ

0 голосов
/ 02 июля 2019

В итоге я проигнорировал объект defaultOptions в конструкторе.Я определяю fetchPolicy в самом запросе, в зависимости от состояния сети.

function getZones() {
  return ApolloService.client.query({
    query: GET_ZONES_CLIENT,
    fetchPolicy: navigator.onLine ? 'network-only' : 'cache-only'
  })
}
...