我如何才能全局了解ApolloClient中所有查询的networkStatus?

时间:2019-09-20 12:51:37

标签: networking react-apollo apollo-client

我正在尝试显示networkStatus运行中的预加载器。

我知道每个查询都返回自己的networkStatus,但是在我的应用程序中有很多不同的查询。我想有一种全局处理所有查询的所有networkStatus的方法。

我想在代码中知道的答案是:“网络上是否有任何待处理的查询?”

1 个答案:

答案 0 :(得分:2)

当前,没有办法做到这一点,至少不容易/内置。您可以在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/上了解有关链接的更多信息。

或者,通过查看Apollo公开公开的一些API,我能够以这种“非官方”方式进行检查:

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

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