You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo Subscription解析器变量为空,订阅过滤失效求助

Apollo订阅变量为空,无法筛选会话通知的问题

问题背景

我编写了一个Apollo resolver用于将用户连接到会话,代码如下:

connectUserToSession: async (_, args) => {
  const session = await prisma.session.update({
    where: {
      id: Number(args.sessionId)
    },
    data: {
      players: {
        connect: {
          id: Number(args.userId)
        }
      }
    },
    include: {
      players: true,
      host: true
    }
  })

  pubsub.publish('USER_JOINED_SESSION', { userJoinedSession: session })

  return session
},

该resolver执行后,用户可成功连接到会话,且publish操作也已触发。但userJoinedSession订阅未按预期工作,订阅代码如下:

userJoinedSession: {
  subscribe: withFilter(
    () => pubsub.asyncIterator('USER_JOINED_SESSION'),
    (payload, variables) => {
      console.log('/// START SUBSCRIPTION ////')
      console.log(payload)
      console.log('///')
      console.log(variables)
      console.log('/// END SUBSCRIPTION ////')
    },
  ),
}

日志信息

从日志可以看到,payload包含了新用户加入的会话信息,但variables的值为空对象:

/// START SUBSCRIPTION ////
{
  userJoinedSession: {
    id: 671,
    name: 'Talk about dogs',
    code: '878614',
    userId: 690,
    players: [
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object]
    ],
    host: { id: 690, name: 'asdasdas', messageId: null, sessionId: 671 }
  }
}
///
{}
/// END SUBSCRIPTION ////
/// START SUBSCRIPTION ////
{
  userJoinedSession: {
    id: 671,
    name: 'Talk about dogs',
    code: '878614',
    userId: 690,
    players: [
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object]
    ],
    host: { id: 690, name: 'asdasdas', messageId: null, sessionId: 671 }
  }
}
///
{}
/// END SUBSCRIPTION ////

官方说明与需求

根据Apollo官方文档说明:

variables是包含客户端发起订阅时提供的所有参数的对象。

这说明发起订阅时未传入参数,但文档未详细说明正确的实现方式。我的需求是仅向已连接到该会话的用户发送新用户加入的通知,请问如何解决variables为空的问题?


内容的提问来源于stack exchange,提问作者Peter Boomsma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:43:09