javascript - GraphQL:如何重用“单个对象”解析器来加载相同对象的数组
问题描述
我有两个查询,一个是获取单个项目,一个是获取项目数组
extend type Query{
allProjects: [Project!]
oneProject(id:ID!):Project
}
我已经为项目对象字段编写了单独的解析器。我的目标是只加载实际请求的那些字段。我使用了本教程https://medium.com/paypal-tech/graphql-resolvers-best-practices-cd36fdbcef55
export const resolvers: IResolvers = {
Query: {
async oneProject(_, { id }) {
return { id };
},
},
Project: {
name: async ({ id }) => {
const { name } = await projectLoader.load(id);
return name;
},
description: async ({ id }) => {
const { description } = await projectLoader.load(id);
return description;
},
task: async ({ id }) => {
const { task } = await projectLoader.load(id);
const resolvedTask = taskLoader.load(task)
return resolvedTask;
},
...
}
我使用数据加载器,以避免每次执行字段解析器时加载项目。
有了所有这些逻辑,我如何最好地实现第二个查询以获取所有项目?是否有可能将所有项目的 ID 传递给我已经实现的处理单个项目的解析器?如果没有,我将不得不再次实现我为单个解析器实现的相同逻辑。最终目标仍然是仅加载请求的字段而不是所有字段并使用数据加载器。数据加载器很重要,因为我还有其他类型,包括被许多其他人引用的人员类型(我尽量避免多次加载同一个人)。
谢谢你的帮助。
解决方案
推荐阅读
- c# - 每个单词的正则表达式首字母大写,以空格分隔,长度为 3 到 29 个字符...C#
- kotlin - 使用 Algolia Kotlin 客户端
- powershell - 为什么 export-csv 在 SQL Server 上的 Powershell 中无法正常运行?
- jquery - jQuery: if checkbox is checked remove part of form
- reactjs - React 使用 useEffect 挂钩分页 - 如果请求失败,如何恢复页码?
- android - Android 多媒体隧道同步标头
- java - How to get distinct values from array list in Android
- windows - 如何从 Powershell 输出中筛选出驱动器号
- python - 如何查找一个单词(字符串)是否在 python 的输入/列表中多次出现
- java - 反序列化设置与序列化前不同的哈希码