Graphql 阿波罗客户端:@defer可以与客户端解析器一起使用吗?

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

出于某种原因,我不得不构建一个仅客户端的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
            })
        });
客户情况如下:

    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
指令