如何使用Apollo Graphql React客户端访问本地解析器中的提取策略

时间:2019-11-10 12:35:28

标签: reactjs graphql apollo react-apollo

我正在使用React和Apollo Graphql客户端创建一个应用程序。此应用必须具有本地解析器,才能从旧版REST API检索数据并将其写入缓存。

我从此解析器期望的是,它将首先尝试从本地缓存中获取数据,然后如果不存在,则它将从旧版API中获取数据。但是有时有时这些数据也会由应用程序的其他部分更新,因此在这种情况下,我希望解析器忽略缓存并直接转到旧版API。

我知道我上面描述的内容与Apollo客户端提供的fetchPolicies类似:第一种情况为cache-first,第二种情况为network-only,我想用它们来确定我的解析器的行为。

但是,我在解析器的参数中找不到fetchPolicy。我现在使用的解析器的功能签名是这样的:

export async function customerData(
  root: any,
  variables: any,
  context: { client: ApolloClient<any>; cache: InMemoryCache; getCacheKey: any },
  info: any
): Promise<CustomerData | null> {
  console.log('root', root);
  console.log('variables', variables);
  console.log('context', context);
  console.log('info', info);

  return null;
}

并且获取策略不可用。

执行本地解析程序时,是否有办法知道所选的fetchPolicy?还是有解决此问题的另一种方法?

注1:我知道我可以将fetchPolicy与解析器的变量一起发送,但是我正在寻找一种更优雅的解决方案,以利用我们在Apollo中已经拥有的功能。

注2:为此,我也可以使用Apollo Link Rest,而不是编写自己的解析器,让它调用fetchaxios来检索数据。但是我不愿意使用它,因为它不支持任何超时配置,并且由于我的应用程序打算在互联网连接不良的环境中执行,因此我不希望它尝试无限期地获取数据。

1 个答案:

答案 0 :(得分:0)

我刚刚看过我想错过的Apollo客户端文档的这一部分:https://www.apollographql.com/docs/react/data/local-state/#working-with-fetch-policies

基本上说fetch-policies是在调用解析器之前进行评估的,它们的工作原理与调用远程解析器时相同。

因此,我运行了一些测试,并使用默认策略(cache-first),我的解析程序仅被调用一次,其余时间直接从缓存中返回结果。

如果我将fetch-policy更改为network-only,则始终调用我的解析器函数。