Apollo GraphQL 退订似乎被打破了
Apollo GraphQL unsubscribe seems to be broken
我们在 node.js 后端和 React 前端中使用带有订阅(通过 websockets)的 Apollo GraphQL。
该应用程序提供设备列表。当用户点击一台设备时,他会通过实时更新(来自订阅)获得设备的监控数据。当用户点击另一个设备时,订阅停止,下一个设备的数据正在加载和订阅。
我在下面粘贴了来自 websocket 连接的消息。我首先尝试在这里粘贴原始日志,但屏幕截图更容易阅读。
请忽略ID 1-5。对我的问题来说重要的是 id 6 和 7。当单击第一个设备时(在 11:15:35)创建 id,然后详细信息关闭,因此订阅停止(在 11:15:36)。现在,用户单击另一个设备并开始订阅 7。几秒钟后,系统会为第 6 个和第 7 个订阅推送数据。
有什么我可以做的 "stop" 实际上意味着 "stop" 还是这是一个错误?
编辑:根据要求,这是我用来 subscribe/unsubscribe 的代码(由于公司规定,我不得不删减一些部分)
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,开始订阅并再次停止它也会发生。新数据未显示,但在浏览器网络选项卡的 websocket 连接中可见 (chrome)。
这似乎是较旧的 apollo graphql 或 nestjs-apollo-graphql 版本(我们在后端使用这些框架)中的错误。将所有后端依赖项升级到 "latest" 后,错误似乎并没有持续存在。
我们在 node.js 后端和 React 前端中使用带有订阅(通过 websockets)的 Apollo GraphQL。 该应用程序提供设备列表。当用户点击一台设备时,他会通过实时更新(来自订阅)获得设备的监控数据。当用户点击另一个设备时,订阅停止,下一个设备的数据正在加载和订阅。
我在下面粘贴了来自 websocket 连接的消息。我首先尝试在这里粘贴原始日志,但屏幕截图更容易阅读。
请忽略ID 1-5。对我的问题来说重要的是 id 6 和 7。当单击第一个设备时(在 11:15:35)创建 id,然后详细信息关闭,因此订阅停止(在 11:15:36)。现在,用户单击另一个设备并开始订阅 7。几秒钟后,系统会为第 6 个和第 7 个订阅推送数据。
有什么我可以做的 "stop" 实际上意味着 "stop" 还是这是一个错误?
编辑:根据要求,这是我用来 subscribe/unsubscribe 的代码(由于公司规定,我不得不删减一些部分)
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,开始订阅并再次停止它也会发生。新数据未显示,但在浏览器网络选项卡的 websocket 连接中可见 (chrome)。
这似乎是较旧的 apollo graphql 或 nestjs-apollo-graphql 版本(我们在后端使用这些框架)中的错误。将所有后端依赖项升级到 "latest" 后,错误似乎并没有持续存在。