node.js - GraphQL 将输入参数传递给订阅
问题描述
我正在尝试将像 ID 这样的输入参数传递给 GQL 订阅。我正在与:
const { PubSub } =require ('apollo-server');
这是 阿波罗订阅参考页面
基本上我正在尝试这个简单的订阅 typedef :
type Subscription{
subscribe_device(id: String!): device}
这是我的订阅解析器:
Subscription:{
subscribe_device:(parent, args, context, info) =>{
console.log(args)
subscribe: () => pubsub.asyncIterator('stream')
}
}
实际上没有输入参数它工作得很好,但在这种情况下,它似乎与 asyncIterator 有问题
没有输入参数:
Subscription:{
subscribe_device:{
subscribe: () => pubsub.asyncIterator('stream'),
}
}
有人知道如何处理这个问题吗?如何在订阅中输入一些参数?我需要它来创建动态不同的“流”
非常感谢您的帮助
解决方案
如果您需要根据参数对通道进行描述,您只需使用args
来创建基于它的通道名称。例如:
Subscription:{
subscribeDevice: {
subscribe: (_parent, args, _context, _info) => {
const { someId } = args;
return pubsub.asyncIterator([`stream_${someId}`])
}
}
}
这种方法适用于我使用apollo-server@2.19.0
.
推荐阅读
- python - TensorFlow、GPU 或代码中的错误?'无法处理内核分页请求'
- email - 当我使用变量作为电子邮件触发关键字时,Logstash 无法发送电子邮件
- system-verilog - 在 RTL 仿真中将生成的时钟定义为同步的
- oracle - 29283. 00000 - “无效的文件操作”
- xamarin.ios - 让 UI 适应 iPhone 和 iPad
- javascript - 有没有更“余烬的方式”来计算这个值?
- visual-studio-code - 如何在 VS 代码扩展中访问自动检测到的链接
- python - 使用 random.choice() 随机选择一个动作(定义)
- java - 检查字符串并处理无效日期
- java - 为什么编译器认为 `byte...` 和 `char...` 是模棱两可的