Да, переместите логи извлечения c в распознаватель для bars
:
const resolvers = {
Query: {
foo: () => {...},
},
Foo: {
bars: ({ id }) => {
const { data: { bars } } = await httpRequest({
url: `/api/bars/?fooId=${id}`
})
return bars
},
},
}
Первый параметр, передаваемый каждому распознавателю, - это значение, в котором разрешено родительское поле. Пока то, что возвращается внутри резольвера для Query.foo
, включает id
, это будет доступно для резольвера для Foo.bars
.
Резолвер поля не вызывается, пока это поле не запрошено (и родительское поле не разрешается в ноль). Таким образом, ваш вызов /api/bars
будет инициирован только в том случае, если поле присутствует в запросе.
Также возможно продолжить выборку всего на уровне root, если хотите. Четвертый параметр, передаваемый распознавателю, - это объект GraphQLResolveInfo
, который будет содержать информацию о запросе, включая поля, которые были запрошены. Вы можете разобрать этот объект, и ваш распознаватель root будет вести себя соответствующим образом. Для более простого сценария ios, подобного этому, это излишне.