子解析器中的GraphQL参数

子解析器中的GraphQL参数,graphql,apollo,Graphql,Apollo,我正在使用graphql工具测试一个模式,其中父级和子级都接收一个参数 { parentWithArg(a: "test") { childWithArg(b: "test") } } 当子解析器运行时,我感到困惑,因为第一个参数包含args,它与。obj参数似乎完全不存在 const resolvers = { Query: { parentWithArg(obj, args, ctx) { console.log('parentWithArg

我正在使用
graphql工具
测试一个模式,其中父级和子级都接收一个参数

{
  parentWithArg(a: "test") {
    childWithArg(b: "test")
  }
}
当子解析器运行时,我感到困惑,因为第一个参数包含
args
,它与。
obj
参数似乎完全不存在

const resolvers = {
  Query: {
     parentWithArg(obj, args, ctx) {
        console.log('parentWithArg obj:', obj); // `{}` as expected
        return {
            childWithArg(obj, args, ctx) {
                console.log('childWithArg obj:', obj); // `{ b: 'test' }`
                return args.b; // null
            }
        };
    },
  },
};

以下是Apollo Launchpad上的示例:

当您为解析程序返回的对象中的一个属性返回函数时会发生这种情况——GraphQL将调用该函数来解析该值,但它将仅使用三个参数而不是四个参数(args、context和info)来调用它。本例中的父值或“根”值被删除,因为本例中的函数是作为解析同一根值的一部分被调用的

要访问根值,您的
childWithArg
字段的解析程序应位于
Parent
类型的解析程序下面,如下所示:

const resolvers = {
  Query: {
     parentWithArg(obj, args, ctx) {
        return {}
    },
  },
  Parent: {
    childWithArg(obj, args, ctx) {
      console.log('childWithArg obj:', obj)
      return args.b
    },
  },
}
谢谢,丹尼尔说得有道理:)我在阿波罗或GQL文档中找不到提到这一点的地方……这看起来像。。。。