Как получить доступ к политике извлечения в локальном преобразователе с помощью клиента Apollo Graphql React - PullRequest
0 голосов
/ 10 ноября 2019

Я создаю приложение, используя React и клиент Apollo Graphql. Это приложение должно иметь локальный преобразователь для извлечения данных из устаревшего API REST и записи его в кэш.

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

Я знаю, что то, что я описал выше, похожена fetchPolicies, который предоставляет клиент Apollo: первый сценарий будет cache-first, а второй - network-only, и я хотел бы использовать их для определения поведения моего распознавателя.

Однако я не был 'Я не могу найти fetchPolicy в аргументах моего распознавателя. Подпись функции распознавателя, которую я сейчас использую, такова:

export async function customerData(
  root: any,
  variables: any,
  context: { client: ApolloClient<any>; cache: InMemoryCache; getCacheKey: any },
  info: any
): Promise<CustomerData | null> {
  console.log('root', root);
  console.log('variables', variables);
  console.log('context', context);
  console.log('info', info);

  return null;
}

И политика выборки недоступна.

Есть ли способ узнать выбранное fetchPolicy при локальном преобразователевыполняется? Или есть другой способ решить эту проблему?

Примечание 1. Я знаю, что мог бы просто отправить fetchPolicy вместе с переменными преобразователя, но я искал более элегантное решение, которое использовало бы то, что мыуже есть в Apollo.

Примечание 2: я мог бы также использовать для этого Apollo Link Rest вместо того, чтобы писать свой собственный распознаватель и заставить его вызывать fetch или axios для полученияданные. Но я не хотел бы использовать его, потому что он не поддерживает настройку тайм-аута, и поскольку мое приложение предназначено для выполнения в средах с плохим подключением к Интернету, я не хочу, чтобы оно пыталось извлекать данные бесконечно.

1 Ответ

0 голосов
/ 11 ноября 2019

Я только что увидел эту часть клиентской документации Apollo, которую, я думаю, я пропустил раньше: https://www.apollographql.com/docs/react/data/local-state/#working-with-fetch-policies.

В основном это говорит о том, что fetch-policies оцениваются до вызова распознавателя и что ониработать так же, как при вызове удаленного распознавателя.

Итак, я выполнил несколько тестов и, используя политику по умолчанию (cache-first), мой распознаватель вызывается только один раз, а в остальное время результат возвращается непосредственно из кэша.

Если я изменю fetch-policy на network-only, тогда всегда вызывается моя функция распознавания.

...