在GraphQL字段解析器中如何获取同对象的同级Zip字段值?
GraphQL 解析器获取父级字段值方案
实现方法
解析器的第一个参数 parent 就是当前字段所属的父类型实例,此处 CityState 属于 CityInfo 类型,因此 parent 就是上层解析器返回的 CityInfo 对象,直接从该对象中读取 Zip 属性传入接口即可。
修正后的解析器代码如下:
const resolvers = { Query: { CitiesStatesZips: (parent, args, {dataSources}) => dataSources.ZipApi.getZipCodes() }, CityInfo: { CityState: (parent, args, { dataSources }) => // 从父级CityInfo实例中取Zip值传入接口 dataSources.CityStateApi.getCityStateByZip(parent.Zip) } }
注意事项
请确保
ZipApi.getZipCodes()接口返回的列表中每个对象都包含和typeDef定义一致的Zip字段,如果接口返回的键名不匹配,你可以在 Query 解析器中先做字段映射,示例如下:
CitiesStatesZips: async (parent, args, {dataSources}) => { const zipList = await dataSources.ZipApi.getZipCodes() // 假设接口返回的邮编字段键名为zip_code,映射为typeDef需要的Zip return zipList.map(item => ({ Zip: item.zip_code })) }
执行逻辑说明
- 第一步先执行 Query 层的
CitiesStatesZips解析器,拉取全量邮编列表,每个列表元素对应一个CityInfo实例 - 当客户端请求需要返回
CityState字段时,才会触发CityInfo.CityState解析器,此时传入的parent就是当前要解析的CityInfo实例,可直接读取到对应的Zip字段值
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

