如何过滤和排序数据?关于排序,我应该使用gatsby.js吗?还有其他方法吗?
const RootQuery = new GraphQLObjectType({
name: "Query",
description: "Root Query",
fields: () => ({
member: {
type: MemberType,
description: "A Single Person",
args: {
nick: { type: GraphQLString }
},
resolve(parent, args) {
return axios
.get("http://25.98.140.121:5000/data")
.then(members.find(member => member.nick === args.nick))
}
},
members: {
type: new GraphQLList(MemberType),
description: "List of All Members",
resolve(parent, args) {
return axios
.get("http://25.98.140.121:5000/data")
.then(res => res.data)
}
},
school: {
type: SchoolType,
description: "A Single School",
args: {
name: { type: GraphQLString }
},
resolve: (parent, args) => schools.find(school => school.name === args.name)
},
schools: {
type: new GraphQLList(SchoolType),
description: "List of All Schools",
resolve(parent, args) {
return axios
.get("http://25.98.140.121:5000/data")
.then(res => res.data)
}
})
});
当然,上述过滤(学校,成员)是行不通的,因为我不知道如何连接“查找”和“返回axios”。
这样一来,当我我使用成员(昵称:John)或学校(名称:XYZ)。
希望你明白我的意思。我应该改变什么?也许您还有其他解决方案?
答案 0 :(得分:1)
距离您不太远。 axios.get
返回一个Promise,您已在解析器中正确返回了该Promise。您还正确地使用了then
来修改该Promise的解析值。这里唯一的问题是传递给then
的参数应该是一个函数。所以你想做类似的事情:
return axios
.get("http://25.98.140.121:5000/data")
.then(res => res.data.find(member => member.nick === args.nick))
无论传递给then
的任何函数都将使用您正在调用的then
的Promise的解析值来调用。因此,如果axios.get
返回的Promise将解析为对象成员数组,则该值将传递给您的函数。请注意,我们在上面定义了内联函数,但是也可以单独定义它:
const getMemberByNick = (res) => res.data.find(member => member.nick === args.nick)
return axios
.get("http://25.98.140.121:5000/data")
.then(getMemberByNick)
甚至
const getMemberByNick = (data) => data.find(member => member.nick === args.nick)
return axios
.get("http://25.98.140.121:5000/data")
.then(res => getMemberByNick(res.data))