Я хочу объединить результаты двух запросов в один для моей схемы GraphQL.У меня есть типы stock
и price
, каждый из которых разрешается индивидуально, но я не знаю, как объединить результаты.Вот мои typedefs
и resolvers`:
const typeDefs = gql`
type Query{
stock(symbol: String!): Stock
price(symbol: String!): Price
}
type Stock {
companyName: String
exchange: String
industry: String
sector: String
tags: [String]
cost: Price
}
type Price {
cost: String
}
`;
const resolvers = {
Query:{
stock: async(root, {symbol}, {dataSources}) =>{
return dataSources.myapi.getSomeData(symbol)
},
// dont have a name for your property? ADD ONE!
price: async(root, {symbol}, {dataSources})=>{
return {'cost': dataSources.myapi.getAPrice(symbol)}
}
}
};
Если я выполню такой запрос, я получу null
для цены акций:
query{
stock(symbol:"aapl"){
tags
cost{
cost
}
}
}
Результат примерно такой:
{
"data": {
"stock": {
"tags": [
"Technology",
"Consumer Electronics",
"Computer Hardware"
],
"cost": null
}
}
}
Однако, если я выполню запрос цены, я получу ожидаемый результат для цены:
query{
price(symbol:"aapl"){
cost
}
}
Я использую источники данных иФайл выглядит так:
class MyApi extends RESTDataSource{
constructor(){
super();
this.baseURL = 'https://api.iextrading.com/1.0';
}
async getAPrice(symbol){
return this.get(`/stock/${symbol}/price`);
}
async getSomeData(symbol){
return this.get(`/stock/${symbol}/company`)
}
}
module.exports = MyApi;
Я хотел знать, почему это происходит.Есть ли что-то, что у меня не получается, или отсутствие определенного понимания того, как GraphQL обрабатывает распознаватели?
Будет ли рекомендовано возвращать оба запроса в преобразователе через обещание?Я не уверен, куда идти отсюда.