В GraphQL каждое поле называется разрешением до определенного значения.В GraphQL.js это значение является либо значением, возвращенным распознавателем, либо, если преобразователь возвратил обещание, тем разрешением, к которому это обещание было разрешено.Это значение - то, что передается распознавателю каждого дочернего поля в качестве первого параметра.
На практике это означает, что даже если ваш тип имеет определенные поля и возвращаемый объект должен соответствовать этим полям, он также может включатьлюбое количество дополнительных свойств.
Например, ваш userInfo
распознаватель может выглядеть примерно так:
async (parent, args, context, info) => {
const { name, email } = await getDetails(args.id)
return {
name
email
id: args.id,
}
}
Даже если у вас нет id
поле, мы все еще можем включить это в объект, который мы возвращаем.Таким образом, мы можем передать некоторую дополнительную информацию, например, наши аргументы, в средства разрешения любых дочерних полей.Затем внутри вашего address
резольвера:
async (parent, args, context, info) => {
// `parent` contains `name`, `email` and `id` properties
return getAddress(parent.id)
}