当使用Apollo Link Retry时,它的默认行为是在遇到400错误时停止重试。这是因为400错误通常表示客户端发送的请求存在问题,重试可能不会解决问题。
但是,如果你希望在400错误时继续重试,你可以通过自定义Apollo Link Retry来实现。下面是一个示例代码,展示了如何修改Apollo Link Retry的默认行为:
import { RetryLink } from 'apollo-link-retry';
const retryLink = new RetryLink({
attempts: {
max: Infinity, // 设置最大重试次数为无穷大
retryIf: (error, operation) => {
// 自定义重试条件
const { response } = operation.getContext();
const statusCode = response ? response.status : null;
// 只在400错误时重试
return statusCode === 400;
},
},
});
// 创建Apollo Client时使用retryLink
const client = new ApolloClient({
link: ApolloLink.from([retryLink, httpLink]),
cache: new InMemoryCache(),
});
在上面的代码中,我们创建了一个新的RetryLink实例,并将其作为Apollo Client的链接之一。我们通过attempts
选项来自定义重试的行为。max
选项被设置为Infinity,这意味着重试将无限次数地进行。retryIf
选项用于定义在哪些错误情况下进行重试。在这个例子中,我们检查响应的状态码是否为400,如果是则进行重试。
请注意,仔细考虑是否重试400错误是很重要的。在大多数情况下,400错误表示客户端发送的请求有问题,重试可能无法解决问题。因此,谨慎地使用重试,并确保在使用时了解其潜在的影响和风险。