Node.js 如何在graphql中订阅动态主题?

Node.js 如何在graphql中订阅动态主题?,node.js,graphql,apollo,Node.js,Graphql,Apollo,我在nodejs中有一个graphql订阅,如下所示: const resolvers = { Query: () => { ... }, Mutation: () => { ... }, Subscription: { commentAdded: { subscribe: withFilter( () => pubsub.asyncIterator('COMMENT_ADDED'),

我在nodejs中有一个graphql订阅,如下所示:

const resolvers = {
    Query: () => { ... },
    Mutation: () => { ... },
    Subscription: {
        commentAdded: {
          subscribe: withFilter(
            () => pubsub.asyncIterator('COMMENT_ADDED'),
            (payload, variables) => {
             return payload.commentAdded.repository_name === variables.repoFullName;
            },
          ),
        }
    },
};
您可以看到此订阅使用的主题是“添加的注释”,这是一个硬编码字符串。我想知道是否可以根据用户请求创建动态主题名称

类似下面的代码。它以
payload.id
作为后缀订阅主题。我如何在阿波罗服务器上做到这一点

subscribe: withFilter(
            (payload) => pubsub.asyncIterator('COMMENT_ADDED:'+payload.id),
            (payload, variables) => {
             return payload.commentAdded.repository_name === variables.repoFullName;
            },
          ),

传递给
withFilter
的第一个函数是
subscribe
函数,它决定有效负载的值。因此,它不能作为参数传递有效负载。该函数被传递了四个参数,与任何根解析器相同——根值、字段参数、上下文和GraphQLSolveInfo对象。

传递给
withFilter
的第一个函数是
subscribe
函数,它决定了有效负载的值。因此,它不能作为参数传递有效负载。该函数被传递了四个参数,与任何根解析器相同——根值、字段参数、上下文和GraphQLResolveInfo对象。

您的意思是无法订阅动态主题吗?当需要发布而不是订阅事件时,将调用带有参数的函数。当客户端发出初始请求时,将调用
subscribe
函数。但它是用我描述的四个参数调用的。您可以使用这些参数中的任何一个(如args)来生成要订阅的主题。订阅主题后,更改主题的唯一方法是取消订阅并启动一个新主题。
subscribe
函数使用
withFilter
,其中包含两个函数。第一个没有任何参数。这就是主题的定义。第二个函数具有您提到的4个参数,但当有发布到主题的事件时,将调用此函数。我如何在第二个函数中生成主题?我不确定你从哪里得到的。这个函数有我已经描述过的四个函数。您可以在源代码中看到它。第二个函数是filter函数——不能在其中返回AsyncIterator。第一个函数是subscribe函数,它应该返回特定于主题的异步迭代器。换句话说,传递给withFilter的第一个函数与不使用withFilter时编写的函数相同。哦,你是对的,我看到第一个根值未定义,所以我认为第一个函数中没有参数。你是说无法订阅动态主题吗?当需要发布而不是订阅事件时,将调用带有参数的函数。当客户端发出初始请求时,将调用
subscribe
函数。但它是用我描述的四个参数调用的。您可以使用这些参数中的任何一个(如args)来生成要订阅的主题。订阅主题后,更改主题的唯一方法是取消订阅并启动一个新主题。
subscribe
函数使用
withFilter
,其中包含两个函数。第一个没有任何参数。这就是主题的定义。第二个函数具有您提到的4个参数,但当有发布到主题的事件时,将调用此函数。我如何在第二个函数中生成主题?我不确定你从哪里得到的。这个函数有我已经描述过的四个函数。您可以在源代码中看到它。第二个函数是filter函数——不能在其中返回AsyncIterator。第一个函数是subscribe函数,它应该返回特定于主题的异步迭代器。换句话说,传递给withFilter的第一个函数与不使用withFilter时编写的函数相同。哦,你是对的,我看到第一个根值未定义,所以我认为第一个函数中没有参数。