繁体   English   中英

在任何父解析器中使用子 graphql 解析器 - 解析器链接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM