Graphql 阿波罗客户端:@defer可以与客户端解析器一起使用吗?
出于某种原因,我不得不构建一个仅客户端的GraphQL服务器,我的模式构建如下:Graphql 阿波罗客户端:@defer可以与客户端解析器一起使用吗?,graphql,apollo,apollo-client,apollo-server,Graphql,Apollo,Apollo Client,Apollo Server,出于某种原因,我不得不构建一个仅客户端的GraphQL服务器,我的模式构建如下: private buildSchema(): GraphQLSchema { const allTypes: string = ...// my types const allResolvers: IResolvers[] = ...// my resolvers return makeExecutableSchema({ typeD
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
})
});
客户情况如下:
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
})
});
一切都很好,只是我的问题不是这样。例如,如果我运行:
const gqlQuery: string = `
{
user {
name
slowResolver @defer {
text
}
}
}
`
const $result = this.apollo.getClient().watchQuery({
query: gql(gqlQuery)
});
只有在解决整个查询时才会发出$result
(而不是像预期的那样user
然后slowResolver
)
你知道我在工作流程中遗漏了什么吗?阿波罗号上的
@defer
指令实际上已经被删除了,尽管已经删除了。即使实现了延迟查询,也必须在执行上下文之外处理延迟查询。换句话说,执行模式可以返回一个延迟的执行结果,但是其他的东西(比如Apollo服务器本身)必须处理如何通过任何传输将响应(初始负载和后续补丁)实际发送到服务器
不幸的是,如果您正在定义一个模式客户端,那么就不可能使用@defer
指令