Javascript GraphQL&;使用嵌套的subscribe函数

Javascript GraphQL&;使用嵌套的subscribe函数,javascript,graphql,Javascript,Graphql,我正在编写一个graphql订阅服务器。如果我编写一个查询,将一个解析器嵌套在另一个解析器中是没有问题的,因此查询将如下所示: query { messages { privateMessage { id message userId } } } subscription { messages { privateMessage { id message userId } }

我正在编写一个graphql订阅服务器。如果我编写一个查询,将一个解析器嵌套在另一个解析器中是没有问题的,因此查询将如下所示:

query {
  messages {
    privateMessage {
      id
      message
      userId
    }
  }
}
subscription {
  messages {
    privateMessage {
      id
      message
      userId
    }
  }
}
因此,首先执行
消息
解析器,然后执行
私有消息
解析器。 我想知道订阅是否可以实现相同的结构,因此它看起来是这样的:

query {
  messages {
    privateMessage {
      id
      message
      userId
    }
  }
}
subscription {
  messages {
    privateMessage {
      id
      message
      userId
    }
  }
}
编辑:

这是我拥有的当前根订阅架构:

const RootSubscriptions=new GraphQLObjectType({
名称:'RootSubscriptions',
字段:{
私人信息:{
类型:PrivateMessage.type,
resolve:PrivateMessage.resolve,
订阅:PrivateMessage.subscribe,
},
flaggedMessage:{
类型:FlaggedMessage.type,
resolve:FlaggedMessage.resolve,
订阅:FlaggedMessage.subscribe,
},
团队信息:{
类型:TeamMessage.type,
解析:TeamMessage.resolve,
订阅:TeamMessage.subscribe,
},
},
})
我希望它看起来像这样:

query {
  messages {
    privateMessage {
      id
      message
      userId
    }
  }
}
subscription {
  messages {
    privateMessage {
      id
      message
      userId
    }
  }
}
const RootSubscriptions=new GraphQLObjectType({
名称:'RootSubscriptions',
字段:{
信息:{
类型:新GraphQLObjectType({
名称:“MessagesSubType”,
字段:{
私人信息:{
类型:PrivateMessage.type,
resolve:PrivateMessage.resolve,
订阅:PrivateMessage.subscribe,
},
flaggedMessage:{
类型:FlaggedMessage.type,
resolve:FlaggedMessage.resolve,
订阅:FlaggedMessage.subscribe,
},
团队信息:{
类型:TeamMessage.type,
解析:TeamMessage.resolve,
订阅:TeamMessage.subscribe,
},
}
})
}
},
})
编辑结束

问题是我让
messages
subscribe函数运行,但没有让
privateMessage
subscribe函数运行。我很想知道这是否可能以及如何实现。 因为我是用node.js编写的,所以我希望能用js编写一个示例,但任何指向解决方案的指针都会很有帮助。
提前谢谢

根据我对graphQl订阅工作原理的理解,使用嵌套订阅可能运气不佳。我还没有找到支持这一点的支持文档,但在我自己的实验中,我发现这一点不起作用。 在本例中,我建议您拥有一个messages根订阅,该订阅需要sucription类型的参数,在本例中是private、flagged或team message的枚举。
您可以使用switch case来确定订阅并做出相应的反应。

您是否完成了任何所需的websocket配置?假设这已经完成,您能否提供为subscription@GregBrodzik谢谢你的评论。我添加了模式代码。是的,当前结构中的订阅工作正常,没有问题,返回了异步迭代器、web套接字和所有这些传说。@U Rogel我通常使用pubsub实例在正确的时间触发,通常是在一个突变中,并且不依赖于数据结构的子解析。但是,如果您要从一个变异返回一个消息类型,就像在查询中一样,那么应该点击私有消息的子解析器——与您的查询类似。因此,也许您可以使用
obj
,从专用消息的子解析器上下文中启动pubsub,并在此处合并任何附加数据以增加返回子负载。您可以使用
info
来确定是否在正确的上下文中触发。您是否考虑过为消息创建根订阅,然后将messagetype作为参数提供?这样,订阅是针对消息的,但在解析器中,您可以为每种消息类型切换大小写,在本例中为private、flagged和privateteam@Kisinga这是我在我的问题上得到的最有趣的评论,所以谢谢!但这仍然意味着要对不相关的数据进行多次迭代。我想通过完全订阅我需要的内容来尝试跳过这些迭代。