函数构造函数对象与对象内部对象之间的javascript区别

时间:2018-10-15 07:52:00

标签: javascript graphql

我正在尝试理解/理解GraphQL模式讲师已使用的内容。

所以首先他做了这样的事情

const BookType = new GraphQLObjectType({  
    name: 'Book', 

    fields: () => ({
        id: { type: GraphQLString},
        name: { type: GraphQLString},
        genre: { type: GraphQLString }
    })
})

在这里,他提到字段必须是一个函数的原因是因为稍后当我们有多个类型并且它们相互引用时。那么除非我们将其包装在函数中,否则一种类型将不知道其他类型(稍后再介绍)

然后,当他制作 RootQuery 时,他做了类似的事情

const RootQuery = new GraphQLObjectType({
    name: "RootQueryType",
    fields: {
        book: {
          type: BookType, 
          args: { id: { type: GraphQLString }},
          resolve(parent, args){
           args.id
            }
         }
      }
})

在这里,他做了fields: {而不是他给出以下原因的fields: () => ({

我们不需要像上面的字段一样包装它,因为我们无需担心根查询中的订单如此之多

[问题:] 我无法理解他的解释,所以我正在寻找可以向我解释他为什么fields: {而不是fields: () => ({的人?

1 个答案:

答案 0 :(得分:1)

这可能是因为在RootQueryType中,该字段簿不包含任何对您的自定义声明类型的引用,例如AuthorType。因此,您的现场书仅取决于BookType或您可能已在顶部导入的任何其他GraphQLObjects。现场作者也是如此。其中不应包含BookType的任何引用。

但是,对于您的自定义类型(BookType或AuthorType),它们可能包含彼此的引用,因此它们相互依赖。

因此,在定义这些自定义类型时,您的字段需要包装在函数内。但这并不是RootQuery的必要条件。

如果您想了解更多信息。查找提升的概念。