如何将GraphQL查询中当前迭代的applicationId传递给timeSlicedEvents方法
问题解决方案
你要实现的「将父字段返回值传递给子字段入参」的能力,GraphQL 标准目前没有内置对应指令支持,这也是你搜不到相关术语的核心原因。
核心原因
GraphQL 的字段参数是在请求解析阶段就需要确定的静态值,而父字段的返回值要到查询执行阶段才会生成,两者的生命周期不匹配,原生不支持这种动态传参逻辑。
最优解决方式(推荐)
调整后端 GraphQL Schema 定义即可:timeSlicedEvents 本身是 Application 类型下的子字段,后端在解析该字段时可以直接拿到父级 Application 实例的 applicationId 属性,不需要前端在查询时主动传入该参数。
调整后的查询代码如下:
allApplications(onlyMonitored: false) { applicationId name timeSlicedEvents(duration: 1800, slices: 80) { sliceId warningCount failureCount } }
备选方案(无法修改后端时使用)
如果没有权限调整后端 Schema,可以分两次请求实现需求:
- 第一次请求查询全量
applicationId列表 - 第二次批量发起查询,将每个
applicationId作为参数传入单独的timeSlicedEvents查询,通过别名区分不同应用的返回结果,示例如下:
query getAppEvents($appId1: ID!, $appId2: ID!) { app1Events: timeSlicedEvents(duration: 1800, slices: 80, applicationId: $appId1) { sliceId warningCount failureCount } app2Events: timeSlicedEvents(duration: 1800, slices: 80, applicationId: $appId2) { sliceId warningCount failureCount } }
内容的提问来源于stack exchange,提问作者TugboatCaptain
相关产品推荐
相关产品推荐

