【问题标题】:GraphQL arguments in child resolver子解析器中的 GraphQL 参数
【发布时间】:2018-10-21 21:03:06
【问题描述】:

我正在使用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

【问题讨论】:

    标签: graphql apollo


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2018-07-01
    • 2017-02-05
    • 2022-01-12
    • 2021-08-22
    • 2019-07-14
    • 2019-03-28
    • 2019-08-07
    • 2018-11-28
    • 2018-07-15
    相关资源
    最近更新 更多