如何使用 Apollo Graphql React 客户端访问本地解析器中的获取策略
How to access fetch policy in local resolver using Apollo Graphql React client
我正在使用 React 和 Apollo Graphql 客户端创建一个应用程序。此应用程序必须具有本地解析器才能从遗留 REST API 检索数据并将其写入缓存。
我对这个解析器的期望是,它会首先尝试从本地缓存中获取数据,然后如果不存在,它将从遗留 API 中获取数据。然而有时这些数据也会被我的应用程序的其他部分更新,所以在这种情况下我希望解析器忽略缓存并直接转到遗留 API.
我知道我上面描述的类似于Apollo Client提供的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,而不是编写我自己的解析器并让它调用 fetch
或 axios
来检索数据。但我不想使用它,因为它不支持任何超时配置,而且由于我的应用程序要在互联网连接不良的环境中执行,我不希望它尝试不确定地获取数据。
我刚刚看到我认为我之前错过的这部分 Apollo 客户端文档:https://www.apollographql.com/docs/react/data/local-state/#working-with-fetch-policies。
基本上它说 fetch-policies
在调用解析器之前进行评估,并且它们的工作方式与调用远程解析器时一样。
因此,我 运行 进行了一些测试并使用默认策略 (cache-first
),我的解析器仅被调用一次,其余时间直接从缓存中返回结果。
如果我将 fetch-policy
更改为 network-only
,则始终会调用我的解析器函数。
我正在使用 React 和 Apollo Graphql 客户端创建一个应用程序。此应用程序必须具有本地解析器才能从遗留 REST API 检索数据并将其写入缓存。
我对这个解析器的期望是,它会首先尝试从本地缓存中获取数据,然后如果不存在,它将从遗留 API 中获取数据。然而有时这些数据也会被我的应用程序的其他部分更新,所以在这种情况下我希望解析器忽略缓存并直接转到遗留 API.
我知道我上面描述的类似于Apollo Client提供的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,而不是编写我自己的解析器并让它调用 fetch
或 axios
来检索数据。但我不想使用它,因为它不支持任何超时配置,而且由于我的应用程序要在互联网连接不良的环境中执行,我不希望它尝试不确定地获取数据。
我刚刚看到我认为我之前错过的这部分 Apollo 客户端文档:https://www.apollographql.com/docs/react/data/local-state/#working-with-fetch-policies。
基本上它说 fetch-policies
在调用解析器之前进行评估,并且它们的工作方式与调用远程解析器时一样。
因此,我 运行 进行了一些测试并使用默认策略 (cache-first
),我的解析器仅被调用一次,其余时间直接从缓存中返回结果。
如果我将 fetch-policy
更改为 network-only
,则始终会调用我的解析器函数。