Angular Apollo 使用突变中重新获取查询的响应

问题描述 投票:0回答:2

我正在使用 Apollo 和 GraphQL 开发 Angular 项目。我有一个突变,可以更新帐户列表及其相关详细信息。成功突变后,我使用 refetchqueries 来查询 API 以获取更新的帐户列表。直到这一部分一切正常。

this.apollo.mutate({
        mutation: mutationCreateNewAccount,
        variables: {
            accountNumber: this.accountNumber,
            accountType: this.accountType,
            routingNumber: this.routingNumber,
            nameOfAcountHolder: this.name
        },
        refetchQueries: [{
            query: queryAccounts,
            variables: { accountNumber: this.accountNumber }
        }]}).subscribe(({ data }) => console.log(data),

订阅的“数据”返回来自突变的响应,但有没有一种方法可以使用“queryAccounts”返回的数据,该数据也作为此突变的一部分运行?

似乎有一种方法可以在 React 中做到这一点,但我在 Angular 中没有成功做类似的事情。

angular graphql apollo
2个回答
2
投票

你提到有一些方法可以在反应中做到这一点,但我认为这不是真的。

让我解释一下 Apollo 中的突变是如何工作的。

  1. 您使用
    apollo.mutate()
    选项运行
    refetchQueries
  2. 当您订阅它时,会发出 HTTP 请求(在大多数情况下,有时是 WS 或其他传输层)
  3. Apollo 收到服务器的响应。
  4. 更新商店。
  5. 您订阅的 Observable 会发出结果(您的
    console.log(data)
  6. 接下来,
    refetchQueries
    中指定的每个查询都会启动一个新的 HTTP 请求并针对服务器运行。
  7. Apollo 会根据每个回复更新商店。
  8. 监听这些查询的组件会获取更新的结果

我在文档中对此进行了解释:https://www.apollographql.com/docs/angular/features/cache-updates.html#after-mutations

基本上,refetchQueries 并不是获取或访问数据。


2
投票

您可以拥有一个在重新获取时始终更新的 watchQuery

this.apollo.watchQuery({
            query: query,
            variables: variables
        })
        .valueChanges
        .pipe(
            map(res => res.data)
        )
        .subscribe(data => {
            //Updated your data here
        }, err => {

        })
       })
© www.soinside.com 2019 - 2024. All rights reserved.