Apollo 客户端:@defer 可以与客户端解析器一起使用吗?
Apollo client: Can @defer be used with client side resolvers?
出于某种原因,我不得不构建一个仅客户端的 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
)。
知道我在工作流程中遗漏了什么吗?
@defer
指令实际上已从 Apollo 中删除,尽管有 some work done to reimplement it。不过,即使实现了,延迟查询也必须在执行上下文之外处理。换句话说,执行模式可以 return 延迟执行结果,但其他东西(如 Apollo 服务器本身)必须处理该响应(包括初始负载和后续补丁)如何实际发送到服务器通过任何交通工具。
不幸的是,如果您要在客户端定义模式,则无法使用 @defer
指令。
出于某种原因,我不得不构建一个仅客户端的 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
)。
知道我在工作流程中遗漏了什么吗?
@defer
指令实际上已从 Apollo 中删除,尽管有 some work done to reimplement it。不过,即使实现了,延迟查询也必须在执行上下文之外处理。换句话说,执行模式可以 return 延迟执行结果,但其他东西(如 Apollo 服务器本身)必须处理该响应(包括初始负载和后续补丁)如何实际发送到服务器通过任何交通工具。
不幸的是,如果您要在客户端定义模式,则无法使用 @defer
指令。