![](/img/trans.png)
[英]When to use `parent` and when to use `root` as first argument in a GraphQL-resolver function
[英]use child graphql resolver inside any parent resolver - resolver chaining
假设我有一个作者,他有不同的书。
我可以单独取一本书,也可以找一个作者连同它的书。
type Query {
author(authorId: ID!): Author
book(bookId: ID!): Book
}
type Author {
books: [Book!]!
}
type Book {
title: String!
}
本书已经可以自己解决:
// book-resolver.js
{
// single source of truth for book resolving
Book: {
title: (_, {bookId}) => fetchBookTitleByBookId(bookId)
}
}
// author-resolver.js
{
Author: {
books: (_, {authorId}) => {
const bookIds = fetchBookIdsByAuthorId(authorId)
return {
// here I'm duplicating logic. Can I avoid it?
books: bookIds.map(bookId => ({
title: fetchBookTitleByBookId(bookId)
})
}
}
}
}
我认为创建一个实用程序 function (例如fetchBook(id)
)并在任何地方使用它都不符合解析器链接的“范式”。
一般来说,单独查询这么多项目是个坏主意,但如果必须这样做,可以使用Apollo 解析器链
请记住,这样做,您将调用fetchBookTitleByBookId(bookId)
n 次(其中 n 是书籍的数量)+ fetchBookIdsByAuthorId(authorId)
一次。 有关更多信息,请参阅此答案https://stackoverflow.com/a/60832838/10909317
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.