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

时间:2020-05-29 11:26:44

标签: node.js graphql apollo

我在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;
            },
          ),

1 个答案:

答案 0 :(得分:0)

传递给withFilter的第一个函数是subscribe函数,它确定有效负载的值。因此无法将有效负载作为参数传递。该函数将传递四个参数,这些参数与任何根解析器相同-根值,字段的参数,上下文和GraphQLResolveInfo对象。