由于某种原因,我不得不构建仅客户端的GraphQL服务器,我的架构如下构建:
private buildSchema(): GraphQLSchema {
const allTypes: string = ...// my types
const allResolvers: IResolvers[] = ...// my resolvers
return makeExecutableSchema({
typeDefs: allTypes,
resolvers: allResolvers
});
}
客户如下:
this.client = new ApolloClient({
link: new SchemaLink({schema: this.buildSchema()}),
cache: new InMemoryCache({
addTypename: false
})
});
除了我的查询不是defered以外,其他所有方法都工作正常。例如,如果我运行:
const gqlQuery: string = `
{
user {
name
slowResolver @defer {
text
}
}
}
`
const $result = this.apollo.getClient().watchQuery({
query: gql(gqlQuery)
});
仅在解决整个查询时才会发出$result
(而不是user
,然后是预期的slowResolver
)。
对我在工作流程中错过的事情有什么想法吗?
答案 0 :(得分:0)
@defer
指令实际上已从Apollo中删除,尽管有some work done to reimplement it。即使实现了延迟查询,也必须在执行上下文之外进行处理。换句话说,执行模式可以返回延迟的执行结果,但是其他方式(例如Apollo服务器本身)必须处理如何通过任何传输将响应(初始有效负载和后续补丁)实际发送到服务器。
不幸的是,如果您要定义模式客户端,则无法使用@defer
指令。