GraphQL 查询在突变后仅获取一次数据

Posted

技术标签:

【中文标题】GraphQL 查询在突变后仅获取一次数据【英文标题】:GraphQL Query is fetching data only once after mutation 【发布时间】:2019-11-24 00:26:54 【问题描述】:

我想在执行 addCourseToOrder 突变后获取 userUnpurchasedCourses 查询,但我无法做到。 在订单中添加一个类后,它会获取 userUnpurchasedCourses 查询,但如果我再次将课程添加到订单中,则查询将不会运行。

我尝试在 then 突变块中执行查询,也尝试了重新获取查询,但重新获取查询的问题是我无法获得查询结果。

这就是我定义突变的方式

const Mutation = async (query, variables, refetch) =>
  client.mutate(
    mutation: gql`
      $query
    `,
    variables,
    refetchQueries: () => [
      
    query: gql`
      $refetch?refetch:query
    `,
    variables
  
]
  );

在这里我使用了这样的突变

let res = await Mutation(classes.addCourseToOrder(), 
          userId,
          id,
          orderId,
          amount,
        )
     if (res.data.addCourseToOrder) 
        this.props.getUserUnpurChasedCourses(id)
     

getUserUnpurChasedCourses 将负责运行 userUnpurchasedCourses。

如果您需要更多详细信息,请告诉我

提前致谢。

【问题讨论】:

不确定这是否有帮助,但通常您会在突变结束时订阅。 GraphQL 使用 observables。 .subscribe(result => console.log('result.data in subscribe: ', result.data); ... 不工作,因为我没有使用 apollo-angular,而且我没有在我的架构中包含任何订阅,所以无论哪种方式,它都不起作用,但感谢您的回复,我会尝试添加订阅 嗨@Preston,我找不到重新获取查询的结果,但我只是找到了问题的解决方案。谢谢你的努力 请务必发布您的解决方案! :-) 好的,我已经发布了解决方案。 【参考方案1】:

当我观察到这个问题时,我发现查询在突变后每次都在运行,但不是从服务器(网络)获取数据,而是从缓存内存中获取数据,这就是为什么即使在检查了网络选项卡之后浏览器控制台我没有收到任何请求,这使我无法查明问题,但是我从以前存储的结果中得到了结果,然后在谷歌搜索了很多之后,我发现有一种方法可以禁用从缓存内存中获取,所以我一遍又一遍地尝试,直到完成。

我所做的只是改变了这个查询

export const Query = async (query, variables) =>
  client.query(
    query: gql`
      $query
    `,
     variables
  );

到这里

export const Query = async (query, variables) =>
  client.query(
    query: gql`
    $query
   `,
   variables,
  fetchPolicy: 'network-only'
 );

【讨论】:

以上是关于GraphQL 查询在突变后仅获取一次数据的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 GraphQL 中的嵌套输入

删除突变后不重新获取查询(Apollo Graphql & Nextjs)

获取查询后有条件地执行 graphql 突变

没有参数的 Graphql 突变

另一个突变的 GraphQL 结果

在graphql中突变后查询