Как я могу узнать networkStatus всех запросов в ApolloClient во всем мире? - PullRequest
1 голос
/ 20 сентября 2019

Я пытаюсь показать предварительный загрузчик, когда networkStatus находится в полете.

Я знаю, что каждый запрос возвращает свой собственный networkStatus, но в моем приложении так много разных запросов.Я хочу иметь способ обработки всего networkStatus для всех запросов в глобальном масштабе.

То, что я хочу знать в своем коде, - это ответ на вопрос: "Есть ли какие-либо запросы, ожидающие в сети?".

1 Ответ

1 голос
/ 20 сентября 2019

В настоящее время нет способа сделать это, по крайней мере, нелегко / встроенным.Вы можете запросить это как функцию на https://github.com/apollographql/apollo-feature-requests.

В зависимости от того, чего вы хотите достичь, вам может быть достаточно использовать промежуточное / дополнительное ПО на вашем HttpLink, например:

import { ApolloLink } from 'apollo-link';

const middleware = new ApolloLink((operation, forward) => {
  console.log('Starting', operation);

  return forward(operation);
});

const afterware = new ApolloLink((operation, forward) => {
  return forward(operation).map(response => {
    console.log('Completed', operation);

    return response;
  });
});

const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: ApolloLink.from([
    middleware,
    afterware,
    new HttpLink({ ... }),
  ]),
});

middleware будет вызываться перед каждым запросом, а afterware - после.Вы можете прочитать больше о ссылках по адресу: https://www.apollographql.com/docs/link/.

В качестве альтернативы, глядя на некоторые API, которые Apollo публично предоставляет, я смог проверить этот "неофициальный" способ:

function queriesInFlight() {
  // client is your ApolloClient instance
  const { queryManager } = client;

  return Object.keys(queryManager.queryStore.getStore()).filter(queryId =>
    queryManager.checkInFlight(queryId),
  );
}
...