【问题标题】:Apollo client: Can @defer be used with client side resolvers?Apollo 客户端:@defer 可以与客户端解析器一起使用吗?
【发布时间】:2019-07-25 15:57:37
【问题描述】:

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

知道我在工作流程中遗漏了什么吗?

【问题讨论】:

    标签: graphql apollo apollo-client apollo-server


    【解决方案1】:

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

    如果您要定义模式客户端,很遗憾,将无法使用 @defer 指令。

    【讨论】:

      猜你喜欢
      • 2020-05-03
      • 2020-07-22
      • 2020-01-31
      • 2017-12-29
      • 2022-01-16
      • 1970-01-01
      • 2019-03-28
      • 2019-08-01
      相关资源
      最近更新 更多