在graphql

时间:2018-04-08 06:42:57

标签: javascript graphql apollo

有些东西我觉得应该很容易但是我在搜索网页很长时间后找不到答案:

我只是尝试使用graphql进行变异然后使用另一个graphql查询刷新数据,我怎样才能在一个HTTP(graphql)请求中发生这种情况?

尝试失败:

  1. 我尝试发送两个包含在一个数组中的graphql模式使用batching,但是它是异步的,查询会在不希望的突变之前返回。
  2. 我尝试使用突变来编写相同的查询,实际上没有任何变异,并将其放在真正的突变后,这可行,但我不相信这是优化的解决方案。
  3. 另外,我知道apollo-client(react)有类似update(refetchQuery)等的东西,但是如何在没有任何客户端框架的情况下做到这一点?
  4. 感谢:)

    相关链接:

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想发送一个变异,并在同一个请求/查询中发送一个等待突变完成的查询,然后再解决。从规范的角度来看,这是不可能的。您可以阅读规范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请求的开销是否真的需要优化。

相关问题