我正在尝试使用Apollo的graphql工具来简化graphql服务器。我想做延迟抓取,但不能像使用javascript类作为解析器时那样返回promise。
下面是我得到的信息:
模式
type Customer {
details: Contact!
addresses: [Address]!
}
extend type Query {
customers(first: Int = 0, next: Int = 50): [Customer]
customer(id: Int!): Customer
}解析器
const domain1Resolvers = {
Query: {
customers: (_, {
first,
next
}) => customers(first, next)
}
};解析方法:
const customers = (first, next) => {
return new Promise(resolve => {
var q =
`
SELECT *, company as organization FROM customer
ORDER BY id DESC
LIMIT ?, ?`;
sql.query(q, [first, next], function(err, rows) {
if (err) {
throw Error(err);
}
resolve(rows.map(r => {
return {
details: r,
addresses: () => getAddresses(r.id),
}
}));
});
})
};仅当请求地址时才调用方法getAddresses。在基于类的方法中,我可以让getAddresses返回一个Promise,但如果我尝试使用这种机制,它会抱怨没有返回Iterable。必须有某种方法来仅在请求时获取地址,但是绘制空白,到目前为止还没有找到一个示例。
发布于 2017-08-04 05:06:13
要仅在请求时解析Customer上的字段,您可能希望使用该特定字段的解析器,而不是customers查询的解析器。你的解析器看起来像这样:
const domain1Resolvers = {
Query: {
customers: (_, {
first,
next
}) => customers(first, next)
},
Customer: {
addresses: ({ details: { id } }) => getAddresses(id)
},
};https://stackoverflow.com/questions/45492474
复制相似问题