1
私はApolloのgraphql-toolsを使ってgraphqlサーバを単純化しようとしています。レイジーフェッチをしたいのですが、リゾルバとしてjavascriptクラスを使用するときにできることを約束することはできません。graphql-tools:遅延フェッチ?
は、ここで私が得たものです:
スキーマ
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は、アドレスがのrequ場合にのみ呼び出されますested。クラスベースのアプローチでは、私はgetAddressesがPromiseを返すようにすることができますが、このメカニズムを使用してIterableを試みるとIterableを返さないことについては不平を言います。要求されたときにのみアドレスを取得する方法がいくつか存在するに違いありませんが、空白を描き、今のところ見つからない例があります。
ブリリアント:あなたのリゾルバは次のようになります!ありがとうございました。私はそんなことは何も経験していなかった。 –