Graphql 订阅结果上的联合类型
没有关于如何在订阅上装载graphql联合类型的信息。有可能吗Graphql 订阅结果上的联合类型,graphql,union,subscription,Graphql,Union,Subscription,没有关于如何在订阅上装载graphql联合类型的信息。有可能吗 类型订阅{ joinRequest(id:UUID!):MemberUnion! } 键入用户{…} 键入来宾{…} 联盟成员联盟=用户|来宾 而且它可以完美地处理我的查询或突变,只需要了解有关如何实现订阅的任何信息joinRequest键是userId和rolerole应代表解析器,其中应通过传递的userId参数获取user或guest信息 尝试按现在的状态启动代码后看到的错误: 对于值为{userId:“3bdb0eb5-f
类型订阅{
joinRequest(id:UUID!):MemberUnion!
}
键入用户{…}
键入来宾{…}
联盟成员联盟=用户|来宾
而且它可以完美地处理我的查询或突变,只需要了解有关如何实现订阅的任何信息joinRequest
键是userId
和role
role
应代表解析器,其中应通过传递的userId
参数获取user
或guest
信息
尝试按现在的状态启动代码后看到的错误:
对于值为{userId:“3bdb0eb5-f237-40a7-bebc-6263cc18dba5”,名称:“Trololol3”,有效负载:{…},接收到“null”的字段“Subscription.joinRequest”,抽象类型“MemberUnion”必须在运行时解析为对象类型。“MemberUnion”类型应提供“resolveType”函数,或者每个可能的类型应提供“isTypeOf”“功能。”
导出查询、变体和订阅的my Resolver文件:
导入。。。。
导出默认值{
查询:{
…用户,
表册
…产品
},
突变:{
…列出突变,
…产品销售
},
订阅:{
…产品订购,
…列表订阅
},
产品:{
items:({id:itemId})=>method({itemId})
},
会员工会:{
//eslint禁用下一行无下划线悬挂
__resolveType:obj=>{
if(obj.role==USER\u role.GUEST){
返回“客人”;
}
if(obj.role==USER\u role.USER){
返回“用户”;
}
返回null;
}
},
....
正如我之前所说的,当我在任何查询或突变响应上实现
MemberUnion
时,如果我想选择可以是user或guest的用户对象,那么这一切都很好。订阅可以返回抽象类型(联合和接口)就像查询和突变一样,处理订阅的抽象类型没有什么不同
如果您看到了特定的错误,那么问题通常在于您对所讨论的摘要的resolveType
函数的实现。例如,如果您没有首先提供resolveType
函数,或者如果它的编写方式不总是返回带有o名称的字符串对象类型
基于错误中显示的值({userId:“3bdb0eb5-f237-40a7-bebc-6263cc18dba5”,名称:“Trololo3”,有效负载:{…}
),问题还可能在于如何解析joinRequest
字段。可能您首先没有字段的解析程序,或者解析程序返回的对象的形状与GraphQL预期的形状不匹配(即用户
或来宾
)
如果没有看到更多的相关代码,就无法确定问题出在哪里。谢谢,我想出了一个主意,在订阅之前使用
resolve
方法subscribe
方法,并定义我需要返回的信息类型(来宾或用户对象)