Обычно вы никогда не должны вызывать одного распознавателя из другого. Если у вас есть код, общий для двух или более распознавателей, вы можете извлечь этот код в его собственную функцию (и, возможно, в отдельный модуль) и просто вызвать его из обоих преобразователей.
Таким образом, ваш код может выглядеть примерно так :
subscriptions: {
type: new GraphQLList(EventType),
async resolve(parent, args) {
return getSubscriptionsByIds(parent._subscriptionIds)
},
},
anotherField: {
type: new AnotherType,
async resolve(parent, args) {
const subscriptions = await getSubscriptionsByIds(parent._subscriptionIds)
// do something else with the subscriptions here
},
},
Однако это приведет к дополнительным вызовам в вашу базу данных, если вы уже не используете DataLoader для пакетных вызовов, подобных этому. Лучшим решением было бы переместить логи выбора подписки c на уровень (т. Е. Куда бы вы ни брали свой список пользователей). Вы можете быстро загрузить подписки, используя populate
или $lookup
, тогда они будут доступны через аргумент parent
внутри каждого распознавателя полей пользователя.