Клиент Apollo: может ли @defer использоваться с распознавателями на стороне клиента? - PullRequest
0 голосов
/ 04 марта 2019

По какой-то причине мне пришлось построить сервер 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
            })
        });

И все работает отлично, за исключением того, что мои запросы не defred .Например, если я выполню:

const gqlQuery: string = `
{
user {
   name
   slowResolver @defer {
      text
      }
   }
}
`

const $result = this.apollo.getClient().watchQuery({
query: gql(gqlQuery)
});

$result будет генерироваться только тогда, когда будет решен весь запрос (вместо user и затем slowResolver, как и ожидалось).

Любое представление о том, что я пропустил в рабочем процессе?

1 Ответ

0 голосов
/ 04 марта 2019

Директива @defer была фактически удалена из Аполлона, хотя была проделана некоторая работа, чтобы переопределить ее .Даже если это реализовано, отложенные запросы придется обрабатывать вне контекста выполнения.Другими словами, выполнение схемы может вернуть отложенный результат выполнения, но что-то еще (например, сам сервер Apollo) должно обрабатывать то, как этот ответ (как начальная полезная нагрузка, так и последующие исправления) фактически отправляются на сервер по какому-либо транспорту.

Если вы определяете схему на стороне клиента, к сожалению, будет невозможно использовать директиву @defer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...