阿波罗 HttpLink 异步
Apollo HttpLink Async
对于以下代码:
const apolloClient = new ApolloClient({
cache: new InMemoryCache(),
link: new HttpLink({
uri: endpoint,
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
}
})
});
我需要异步获取 endpoint
和 token
。我该怎么做?
谢谢
您可以使用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,然后根据这些值动态创建您的客户端实例。
对于以下代码:
const apolloClient = new ApolloClient({
cache: new InMemoryCache(),
link: new HttpLink({
uri: endpoint,
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
}
})
});
我需要异步获取 endpoint
和 token
。我该怎么做?
谢谢
您可以使用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,然后根据这些值动态创建您的客户端实例。