如何在ApolloClient.query()上使用“缓存和网络”策略

时间:2019-06-30 05:27:14

标签: graphql apollo-client

我正在使用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 :(得分:0)

我最终忽略了构造函数中的defaultOptions对象。我根据网络状态在查询本身中定义了fetchPolicy。

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