gpt4 book ai didi

javascript - graphql-工具 : lazy fetching?

转载 作者:行者123 更新时间:2023-11-30 15:07:52 25 4
gpt4 key购买 nike

我正在尝试使用 Apollo 的 graphql-tools 简化 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。一定有什么方法只在请求时才获取地址,但是画了一个空白,到目前为止还没有找到例子。

最佳答案

要仅在请求时解析 Customer 上的字段,您可能希望使用该特定字段的解析器而不是 customers 查询的解析器。您的解析器看起来像这样:

const domain1Resolvers = {
Query: {
customers: (_, {
first,
next
}) => customers(first, next)
},
Customer: {
addresses: ({ details: { id } }) => getAddresses(id)
},
};

关于javascript - graphql-工具 : lazy fetching?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45492474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com