Apollo HttpLink Async - PullRequest
       6

Apollo HttpLink Async

2 голосов
/ 05 февраля 2020

Для следующего кода:

const apolloClient = new ApolloClient({
  cache: new InMemoryCache(),
  link: new HttpLink({
    uri: endpoint,
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${token}`
    }
  })
});

Мне нужно получить endpoint и token асинхронно. Как я могу это сделать?

Спасибо

1 Ответ

2 голосов
/ 05 февраля 2020

Вы можете использовать apollo-link-context для изменения ваших запросов. Вы можете кэшировать значения, как показано, если вы не извлекаете их при каждом запросе.

let token
let uri
const contextLink = setContext(async () => {
  if (!token) {
    token = await getTokenAsync()
  }
  if (!uri) {
    uri = await getUriAsync()
  }

  return { uri, token }
});

const client = new ApolloClient({
  ...
  link: ApolloLink.from([
    contextLink,
    httpLink,
  ])
})

Выше приведен предпочтительный способ динамической установки этих параметров. Кроме того, вы можете просто получить токен и URI перед рендерингом вашего ApolloProvider, а затем динамически создать экземпляр клиента на основе значений.

...