【发布时间】:2018-09-22 21:29:27
【问题描述】:
我希望将两个查询的结果合并为一个用于我的 GraphQL 架构。我有一个stock 和price 类型,每个都单独解决,但我不知道如何组合结果。
这是我的typedefs 和解析器:
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
}
}
我正在使用datasources,文件看起来像这样:
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 处理解析器的某种方式的理解?
是否建议通过 Promise 在解析器中返回两个查询?我不知道从这里去哪里。
【问题讨论】:
标签: javascript graphql apollo graphql-js apollo-server