ApolloClient версии 2.0 использует Observable
вместо Promise
.Вот так я справляюсь с обновлением токена.Мой TokenService.refreshToken
может выбросить пользовательский TokenRefreshException
const client = new ApolloClient({
uri: 'https://www.myapp.no/api/',
request: async (operation) => {
const token = await TokenStorage.fetchToken()
updateOperation(operation, token)
},
onError: (error) => {
return handleAuthError(error)
}
})
const handleAuthError = (error) => {
return new Observable((observer) => {
TokenService.refreshToken()
.then((token) => {
updateOperation(error.operation, token)
})
.then(() => {
const subscriber = {
next: observer.next.bind(observer),
error: observer.error.bind(observer),
complete: observer.complete.bind(observer)
}
error.forward(error.operation).subscribe(subscriber)
})
.catch((e) => {
// ??????
// e here is an instance of TokenRefreshException
observer.error(e)
})
})
}
Однако, когда я использую свой client
, e
в catch
будет Network error undefined
try {
const a = await client.mutate({
mutation: myQuery,
variables: myVariables
})
} catch(e) {
// ?????
// e here is Network error undefined
throw e
}
Как я могу получить мой фактический кастом TokenRefreshException
?