Как отловить актуальную ошибку в ApolloClient - PullRequest
0 голосов
/ 16 октября 2018

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?

...