在优化我的 GraphQL 解析器时,我意识到使用它们的解析器解析所有字段(而不是使用带有一些预填充数据的父解析器)是以最强大的方式利用 DataLoader 的方式。像这样:
export const User = objectType({
name: 'User',
definition(t) {
t.nonNull.id('id')
t.string('email', {
resolve(parent, _, ctx) {
// `getUser()` is a function that fetches the DB and then returns Promise<User>
// It's internally using Prisma, which has an internal DataLoader
return getUser(ctx).then(user => user?.email)
}
})
// more fields with similar resolvers...
}
})
null
但是,通过这样做,当用户不存在时(至少在我的知识中)返回用户变得不可能。于是问题就来了。
- 是否可以使 GraphQL 解析器中的整个父对象无效?
- 如果是这样,如何?
- 如果没有,添加类似
exists
字段的内容会是最好的解决方案吗?