【问题标题】:Apollo GraphQL unsubscribe seems to be brokenApollo GraphQL 取消订阅似乎坏了
【发布时间】:2020-01-01 11:58:14
【问题描述】:

我们在 node.js 后端和 react 前端中使用 Apollo GraphQL 和订阅(通过 websockets)。 该应用程序提供了设备列表。当用户点击一台设备时,他会通过实时更新(来自订阅)获取该设备的监控数据。当用户点击另一个设备时,订阅停止,下一个设备的数据正在加载和订阅。

我从下面的 websocket 连接中粘贴了消息。我首先尝试将原始日志粘贴到此处,但屏幕截图更易于阅读。

请忽略 ID 1-5。对我的问题来说重要的是 id 6 和 7。当点击第一台设备时(在 11:15:35)创建 id,然后关闭详细信息,因此停止订阅(在 11:15:36)。现在用户点击另一个设备并开始订阅 7。几秒钟后,系统推送第 6 和第 7 个订阅的数据。

有什么我可以做的吗?“停止”实际上意味着“停止”还是这是一个错误?

编辑:根据要求,这是我用来订阅/取消订阅的代码(由于公司规定,我不得不削减一些部分)

    const subscription = useRef(null)
    const { loading, data, error, subscribeToMore } = useQuery(getDevice, { variables: { deviceId } })
    useEffect(() => {
        return () => {
            if (!subscription.current) return
            subscription.current()
            subscription.current = null
        }
    }, [deviceId])
    if (!subscription.current) {
        subscription.current = subscribeToMore({
            document: geDeviceSubscription,
            variables: {
                deviceId
            },
            updateQuery: (prev, { subscriptionData }) => ({ device: subscriptionData.data.subscribeDevice })
        })
    }

编辑 2:这肯定不是我的客户问题,因为如果使用 GraphiQL gui、开始订阅并再次停止它,也会发生这种情况。新数据未显示,但在浏览器(chrome)的网络选项卡中的 websocket 连接中可见。

【问题讨论】:

  • 请编辑您的问题以显示您取消订阅的实际代码。
  • 我添加了代码,虽然我认为回答这个问题没有帮助。

标签: apollo graphql-subscriptions


【解决方案1】:

这似乎是旧版 apollo graphql 或 nestjs-apollo-graphql 版本中的一个错误(我们在后端使用这些框架)。将所有后端依赖项升级到“最新”后,该错误似乎并没有持续存在。

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 2017-09-19
    • 2020-10-08
    • 2019-12-05
    • 2020-08-03
    • 2020-07-07
    • 2017-09-01
    • 2019-07-11
    • 2022-12-12
    相关资源
    最近更新 更多