GraphQL和使用嵌套的订阅功能

时间:2020-07-12 18:26:47

标签: javascript graphql

我正在编写一个graphql订阅服务器。如果我编写查询,则将解析程序嵌套在另一个之中是没有问题的,因此查询看起来像这样:

query {
  messages {
    privateMessage {
      id
      message
      userId
    }
  }
}

因此,首先执行messages解析器,然后执行privateMessage解析器。 我想知道是否可以实现相同的订阅结构,所以它看起来像这样:

subscription {
  messages {
    privateMessage {
      id
      message
      userId
    }
  }
}

编辑:

这是我当前拥有的根订阅模式:

const RootSubscriptions = new GraphQLObjectType({
  name: 'RootSubscriptions',
  fields: {
    privateMessage: {
      type: PrivateMessage.type,
      resolve: PrivateMessage.resolve,
      subscribe: PrivateMessage.subscribe,
    },
    flaggedMessage: {
      type: FlaggedMessage.type,
      resolve: FlaggedMessage.resolve,
      subscribe: FlaggedMessage.subscribe,
    },
    teamMessage: {
      type: TeamMessage.type,
      resolve: TeamMessage.resolve,
      subscribe: TeamMessage.subscribe,
    },
  },
})

我希望它看起来像这样:

const RootSubscriptions = new GraphQLObjectType({
  name: 'RootSubscriptions',
  fields: {
    messages: {
      type: new GraphQLObjectType({
        name: 'MessagesSubType',
        fields: {
          privateMessage: {
            type: PrivateMessage.type,
            resolve: PrivateMessage.resolve,
            subscribe: PrivateMessage.subscribe,
          },
          flaggedMessage: {
            type: FlaggedMessage.type,
            resolve: FlaggedMessage.resolve,
            subscribe: FlaggedMessage.subscribe,
          },
          teamMessage: {
            type: TeamMessage.type,
            resolve: TeamMessage.resolve,
            subscribe: TeamMessage.subscribe,
          },
        }
      })
    }
  },
})

编辑结束

问题是我让messages订阅函数运行但没有让privateMessage订阅函数运行。很想知道是否有可能以及如何实现它。 由于我是用node.js编写的,因此我会欣赏js中的示例,但是任何指向解决方案的指针都将有所帮助。 预先感谢!

1 个答案:

答案 0 :(得分:1)

基于我对graphQl订阅工作方式的理解,嵌套订阅可能不怎么幸运。我没有找到支持该文档的支持文档,但是在我自己的实验中,我没有发现此文档有效。 在这种情况下,我建议您有一个消息根订阅,该订阅需要使用推荐类型的参数,在这种情况下,该枚举可以是私有消息,标记消息或团队消息。 您可以使用切换案例来确定订阅并做出相应的反应。