如果您在使用Apollo客户端时遇到“Error Link Retry operation after fetch request or mutation done”的错误,可能是由于重复发送GraphQL请求引起的。您可以通过以下示例代码来解决此问题:
import { ApolloLink } from 'apollo-link';
const myLink = new ApolloLink((operation, forward) => {
let lastObservable = forward(operation);
lastObservable = lastObservable.filter(response => {
const { errors } = response;
if (errors) {
// 如果不是请求中的错误,则重新抛出错误
const requestError = errors.some(error => error.extensions.code !== 'FETCH_ERROR');
if (requestError) {
throw response;
}
}
return true;
});
return lastObservable;
});
这个例子中,我们使用ApolloLink来构建一个新的链接,它将请求过程中的错误分为两类:请求错误和获取错误。如果代理链中的响应包含错误,并且不是由获取错误引起的,则重新抛出错误。
然后,您可以将新的链接放入Apollo客户端中,以便在发生错误时进行重试。例如:
import { ApolloClient } from 'apollo-client';
import { HttpLink } from 'apollo-link-http';
const myLink = ... // 上面的Apollo链接
const httpLink = new HttpLink({ uri: '/graphql' });
const client = new ApolloClient({
link: myLink.concat(httpLink),
cache: new InMemoryCache(),
});
这样,您就可以避免遇到“Error Link Retry operation after fetch request or mutation done”的错误了,并在请求中发生错误时进行重试。