子解析器中的 GraphQL 参数

GraphQL arguments in child resolver

我正在使用 graphql-tools 并正在测试父子都接收参数的模式。

{
  parentWithArg(a: "test") {
    childWithArg(b: "test")
  }
}

当子解析器运行时,我很困惑,因为第一个参数包含 args,它与 spec 不匹配。 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 上的示例:https://launchpad.graphql.com/p08j03j8r0

当您 return 对象中的一个属性的函数由解析器 return 编辑时,就会发生这种情况——GraphQL 将调用该函数来解析该值,但它只会调用它使用三个参数而不是四个(参数、上下文和信息)。本例中的父值或 "root" 值被删除,因为本例中的函数被调用作为解析完全相同的根值的一部分。

要访问根值,childWithArg 字段的解析器应位于 Parent 类型的解析器之下,如下所示:

const resolvers = {
  Query: {
     parentWithArg(obj, args, ctx) {
        return {}
    },
  },
  Parent: {
    childWithArg(obj, args, ctx) {
      console.log('childWithArg obj:', obj)
      return args.b
    },
  },
}