Аргументы GraphQL в дочернем резольвере - PullRequest
0 голосов
/ 11 мая 2018

Я использую 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
            }
        };
    },
  },
};

Вот пример на Аполлон Launchpad: https://launchpad.graphql.com/p08j03j8r0

1 Ответ

0 голосов
/ 11 мая 2018

Это происходит, когда вы возвращаете функцию для одного из свойств объекта, возвращаемого распознавателем - GraphQL вызовет функцию для разрешения значения, но вызовет ее только с тремя параметрами вместо четырех (аргументы, контекст и Информация). Родительское или «корневое» значение в этом случае отбрасывается, потому что функция в этом случае вызывается как часть разрешения того же корневого значения.

Чтобы получить доступ к корневому значению, ваш распознаватель для поля childWithArg должен находиться под определителями для типа Parent, например:

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