javascript - graphql 中突变后的查询

标签 javascript graphql apollo

有件事我认为应该很容易,但我在网上搜索了很长时间后找不到答案:

我只是尝试使用 graphql 进行突变,然后使用另一个 graphql 查询刷新数据之后,如何才能仅在一个 HTTP(graphql) 请求中实现这一点?

失败的尝试:

  1. 我尝试发送两个包含在一个数组中的 graphql 模式,使用 batching ,但它是异步的,并且查询在突变之前返回,这是不需要的。
  2. 我尝试使用突变编写相同的查询,该查询实际上不会发生任何变化,并将其放在真正的突变之后,这是有效的,但我不认为这是对此的优化解决方案。
  3. 此外,我知道 apollo-client(react) 有类似 update(refetchQuery) 等的功能,但是在没有任何客户端框架的情况下如何才能做到这一点?

谢谢:)

相关链接:

最佳答案

如果我理解正确,您想要发送一个突变,并在同一请求/查询中发送一个等待突变完成后再解决的查询。从规范的 Angular 来看,这根本不可能(目前)。您可以阅读规范here (我知道技术规范听起来很可怕,但如果您已经有点熟悉 GraphQL,那么它很容易阅读:-))。

这个想法是,突变结果被设计为可能返回已更新的数据。我不久前读过一篇关于查询对象类型的文章。本文重点介绍了该类型如何只是一个普通的对象类型,并且可以简单地在突变结果中返回。虽然我不会推荐这种模式,因为我认为突变结果应该明确列出所有更新的对象,但这当然是可能的,并且可以成为非常复杂的情况(如您描述的情况)的解决方案。为了使这一点更加直观,这里有一个示例架构:

type ExampleMutationResult {
  success: Boolean!
  query: Query!
}

type Query {
  queryField: String!
}

type Mutation {
  exampleMutation: ExampleMutationResult!
}

# Query would look like this
mutation example {
  exampleMutation {
    success
    query {
      queryField
    }
  }
}

正如您所看到的,权衡相对较高,并且只有当您可以更改架构时才能启用。我会首先检查第二个 HTTP 请求的开销是否确实需要优化。

关于javascript - graphql 中突变后的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715220/

相关文章:

javascript - 如何停止主干事件冒泡

javascript - 如何在规范文件中注入(inject)服务 Angular Testing (Jasmine/karma)

javascript - Toastr 实现,在 IE 10 中显示错误后

php - Shopify GraphQL Admin API 速率限制成本和 sleep 时间

Django/Graphene/Apollo/django-webpack-loader/Vue : CORS/CSRF not working together?

Javascript (Math.pow(2,31) | 0) 产生负数

javascript - Apollo-react 组合查询不是一个函数

javascript - React-apollo 更新与重新获取

reactjs - React-apollo 中的 data.refetch() 函数如何工作

javascript - 如何在 Apollo 中关闭 GraphQL 订阅的套接字连接