Apollo客户端:@defer可以与客户端解析器一起使用吗?

时间:2019-03-04 10:42:22

标签: graphql apollo apollo-client apollo-server

由于某种原因,我不得不构建仅客户端的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)。

对我在工作流程中错过的事情有什么想法吗?

1 个答案:

答案 0 :(得分:0)

@defer指令实际上已从Apollo中删除,尽管有some work done to reimplement it。即使实现了延迟查询,也必须在执行上下文之外进行处理。换句话说,执行模式可以返回延迟的执行结果,但是其他方式(例如Apollo服务器本身)必须处理如何通过任何传输将响应(初始有效负载和后续补丁)实际发送到服务器。

不幸的是,如果您要定义模式客户端,则无法使用@defer指令。