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

How can I subscribe a dynamic topic in graphql?

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

const resolvers = {
    Query: () => { ... },
    Mutation: () => { ... },
    Subscription: {
        commentAdded: {
          subscribe: withFilter(
            () => pubsub.asyncIterator('COMMENT_ADDED'),
            (payload, variables) => {
             return payload.commentAdded.repository_name === variables.repoFullName;
            },
          ),
        }
    },
};

您可以看到此订阅使用的主题是 COMMENT_ADDED,这是一个硬编码字符串。我想知道我是否可以根据用户请求创建一个动态主题名称。

类似于下面的代码。它以 payload.id 作为后缀订阅主题。我如何在 apollo 服务器中执行此操作?

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

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