Значение «parent», передаваемое вашему распознавателю в качестве первого параметра, в точности соответствует тому, что было возвращено в преобразователе родительского поля (если только не было возвращено обещание, в этом случае оно будет соответствовать разрешенному обещанию).Поэтому, если у нас есть такой преобразователь:
Query: {
getUser: () => {
return {
userId: 10,
email: 'user@example.com',
foobar: 42,
}
}
}
и запрос вроде:
query {
getUser {
id
notes
}
}
То, что передано нашему преобразователю notes
, - это весь объект, который мы вернули внутри преобразователя дляgetUser
.
User: {
notes(obj, args, context, info) {
console.log(obj.userId) // 10
console.log(obj.email) // "user@example.com"
console.log(obj.foobar) // 42
}
}
Родительское значение будет одинаковым, независимо от запрошенных полей, если только логика распознавателя родительского поля на самом деле не возвращает другое значение в зависимости от запрошенных полей.Это означает, что вы также можете передать любое количество других произвольных записей (например, foobar
выше) из родительского в каждое дочернее поле.
РЕДАКТИРОВАТЬ:
Поля разрешаются независимо друг от друга, поэтому нет механизма для объявления зависимостей между полями.Если распознаватель getUser
просматривает запрошенные поля и выполняет определенные вызовы API на основе запрошенных полей (и пропускает другие, если эти поля не были запрошены), вам необходимо изменить эту логику для учета поля notes
требуется user
электронная почта.