У меня есть эта схема:
type Invoice {
id: ID! @unique
description: String
charge: Charge
}
type Charge {
id: ID! @unique
amount: Float
dataFromAPI: DataFromAPI
}
type DataFromAPI {
id: ID! @unique
status: String
}
в Resolver Query, у меня есть:
async function charge(parent, args, ctx, info) {
chargeData = await ctx.db.query.charge(args, info)
chargeData.dataFromAPI = await DO_THE_API_CALL_TO_RETRIEVE_DATA()
return chargeData
}
и
async function invoice(parent, args, ctx, info) {
invoiceData = await ctx.db.query.invoice(args, info)
return invoiceData
}
запрос:
query ChargeQuery {
charge {
id
amount
dataFromAPI
}
}
вернет
{
charge {
id: '232323'
amount: 323
dataFromAPI: 'GREAT! DATA IS FROM API'
}
}
но этот запрос:
query InvoiceQuery {
invoice {
id
description
charge {
id
amount
dataFromAPI
}
}
}
вернет
{
Invoice {
id: '7723423',
description:'yeah',
charge {
id: '232323'
amount: 323
dataFromAPI: null
}
}
}
dataFromAPI
пусто, потому что я не вызывал API в этом преобразователе.
Где я должен вызвать функцию DO_THE_API_CALL_TO_RETRIEVE_DATA()
.
В каждом резольвере? Я думаю, это невозможно масштабировать.