Appsync 客户端对 GraphQL 突变的 Angular 订阅

Posted

技术标签:

【中文标题】Appsync 客户端对 GraphQL 突变的 Angular 订阅【英文标题】:Angular subscription to GraphQL mutation from Appsync Client 【发布时间】:2020-03-21 14:52:44 【问题描述】:

我正在使用 GraphQL 和 AWS 中的 Appsync 在 Angular 中开发一个聊天应用程序。创建新聊天时的工作流程是模拟新聊天并将其发送到服务器,在服务器端为此聊天生成一个 chat_id,我需要检索它并将其发送到我的本地商店。

我的想法是我应该能够订阅 mutate 函数,或者我在执行突变时创建的可观察查询。但是,我在尝试订阅时收到错误“observable.subscribe 不是函数”。如果我尝试订阅整个函数(client.mutate 函数),它也是一样的。

这是导致问题的当前代码:

this.appsync
      .hc()
      .then(client => 
        const observable: ObservableQuery = client.mutate(
          mutation: createChatRoom,
          variables: 
            input: 
              user_id: user.id,
              text: text,
            
          ,
          fetchPolicy: "no-cache"
        )
        observable.subscribe(data => console.log(data));
      )

我还可以控制台记录 observable 并查看值存储在 observable 对象的 __zone_symbol_value 变量中。但我无法检索这些值,或订阅 observable。

关于如何推进这件事的任何想法或提示?

【问题讨论】:

【参考方案1】:

我可以通过在运行 client.mutate 之后添加一个 .then() 语句来解决这个问题。解决方案代码:

this.appsync
  .hc()
  .then(client => 
    const observable: ObservableQuery = client.mutate(
      mutation: createChatRoom,
      variables: 
        input: 
          user_id: user.id,
          text: text,
        
      ,
      fetchPolicy: "no-cache"
    ).then(data => 
          conversation.id = data.data.createChatRoom.chat_id;
  )

出于某种原因,我必须调用 data.data,但我不知道为什么。如果有人知道,请随时回答。否则效果很好:)。

【讨论】:

以上是关于Appsync 客户端对 GraphQL 突变的 Angular 订阅的主要内容,如果未能解决你的问题,请参考以下文章

Graphql apollo 客户端从 AppSync 返回空值

使用 Appsync 更新 GraphQL 中的突变

AppSync 和 GraphQL 枚举突变

使用 AWS Amplify/AppSync 的嵌套 GraphQL 突变

使用 Graphql 和 Amplify/AppSync 基于先前值的突变

aws amplify appsync 中的 Graphql 突变错误