如何在 graphql_flutter 中重试对 GraphQLError 的请求

Posted

技术标签:

【中文标题】如何在 graphql_flutter 中重试对 GraphQLError 的请求【英文标题】:How to retry a request on GraphQLError in graphql_flutter 【发布时间】:2020-08-25 18:12:45 【问题描述】:

当 graphql 响应有一些特定错误时,我想重试 graphql 请求。 我当前的代码:

QueryResult result = await client.query(
              QueryOptions(
                documentNode: gql(queries.getNextEpisode),
                variables: <String, dynamic>
                  'id': id,
                  'keyType': 'POSTER',
                ,
              ),
            );
if (result.hasException && 
    result.exception.graphqlErrors
      .any((element) => element.message.contains("401"))) 
// retry the request 

我尝试了 retry 包,但我认为它只有在抛出异常时才有效,我认为这里不是这种情况。

我正在使用graphql_flutter: ^3.0.0

【问题讨论】:

你解决了吗? 不,很遗憾 【参考方案1】:

为此,您必须使用fresh_graphql/fresh_graphql.dart 包。

_initFreshLink() 
_freshLink = FreshLink<OAuth2Token>(
  tokenStorage: _easyInMemoryTokenStorage,
  refreshToken: _refreshToken,
  shouldRefresh: (FetchResult result) 
    var hasAuthError = result.errors != null &&
        result.errors
                .where((e) =>
                    e['extensions'] != null &&
                    e['extensions']['code'] != null &&
                    e['extensions']['code'] == 'UNAUTHENTICATED')
                .toList()
                .length !=
            0;
    return hasAuthError;
  ,
)..authenticationStatus.listen(print);
 

【讨论】:

以上是关于如何在 graphql_flutter 中重试对 GraphQLError 的请求的主要内容,如果未能解决你的问题,请参考以下文章

在 vuejs 中重试失败的 ajax 请求

在 Java 中重试 JDBC 连接

Ansible - 在循环中重试失败的迭代

在循环中重试死锁,它们最终会解决吗?

Spring Cloud - 在 RestTemplate 中重试工作?

普通消费者可以在 MassTransit 中重试消息之前延长超时时间吗?