阿波罗 HttpLink 异步

Apollo HttpLink Async

对于以下代码:

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

我需要异步获取 endpointtoken。我该怎么做?

谢谢

您可以使用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,
  ])
})

以上是动态设置这些参数的首选方式。或者,您可以在呈现 ApolloProvider 之前获取令牌和 URI,然后根据这些值动态创建您的客户端实例。