【发布时间】:2018-01-09 00:23:17
【问题描述】:
大家好,我刚开始学习如何使用 react/graphql 进行编码,但我很难理解参数传递的工作原理。在下面取自https://github.com/graphql/swapi-graphql 的代码示例中,我不知道resolve 函数何时填充参数“edge”和“conn”。有人可以给我一些见解吗?
export function connectionFromUrls(
name: string,
prop: string,
type: GraphQLOutputType
): GraphQLFieldConfig<*, *> {
const {connectionType} = connectionDefinitions({
name,
nodeType: type,
resolveNode: edge => getObjectFromUrl(edge.node),
connectionFields: () => ({
totalCount: {
type: GraphQLInt,
resolve: conn => conn.totalCount,
description:
`A count of the total number of objects in this connection, ignoring pagination.
This allows a client to fetch the first five objects by passing "5" as the
argument to "first", then fetch the total count so it could display "5 of 83",
for example.`
},
[prop]: {
type: new GraphQLList(type),
resolve: conn => conn.edges.map(edge => getObjectFromUrl(edge.node)),
description:
`A list of all of the objects returned in the connection. This is a convenience
field provided for quickly exploring the API; rather than querying for
"{ edges { node } }" when no edge data is needed, this field can be be used
instead. Note that when clients like Relay need to fetch the "cursor" field on
the edge to enable efficient pagination, this shortcut cannot be used, and the
full "{ edges { node } }" version should be used instead.`
}
})
});
return {
type: connectionType,
args: connectionArgs,
resolve: (obj, args) => {
const array = obj[prop] || [];
return {
...connectionFromArray(array, args),
totalCount: array.length
};
},
};
}
【问题讨论】:
标签: javascript graphql