javascript - 使用 ApolloLink.split 时处理 Apollo Client 的错误

标签 javascript error-handling websocket graphql apollo-client

我有一个简单的代码:

  import { split } from 'apollo-link';
  import { WebSocketLink } from 'apollo-link-ws'
  import { HttpLink } from 'apollo-link-http'
  import ApolloClient from 'apollo-client'
  import { onError } from 'apollo-link-error'

  const wsLink = new WebSocketLink({
    uri: hasura.wsUrl,
    options: {
      reconnect: true,
      timeout: 30000,
      connectionParams: {
        headers: {
          'Authorization': `Bearer ${this.token}`
        }
      }
    }
  })

  const httpLink = new HttpLink({
    uri: hasura.httpUrl,
    headers: {
      'Authorization': `Bearer ${this.token}`
    }
  })

  const link = split(
    ({ query }) => {
      const { kind, operation } = getMainDefinition(query);
      return kind === 'OperationDefinition' && operation === 'subscription';
    },
    wsLink,
    httpLink
  )

  const errorLink = onError(({graphQLErrors, networkError}) => {
    // this callback is never called
    console.log('graphQLErrors', graphQLErrors)
    console.log('networkError', networkError)
  })

  this.client = new ApolloClient({
    link: errorLink.concat(link),
    cache: new InMemoryCache()
  })

如何处理“拆分”链接的错误?对于此示例,捕获错误不起作用。如果我使用没有“拆分”功能的链接,则会出错。

最佳答案

let link = ApolloLink.from([
  onError(({ graphQLErrors, networkError }) => {
    if (graphQLErrors) {
      graphQLErrors.map(({ message, locations, path }) =>
        console.log(
          `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`
        )
      );
    }
    if (networkError) console.error(`[Network error]: ${networkError}`, networkError.stack);
  }),
  ApolloLink.split(
    operation => operation.getContext().important === true,
    httpLink, // don't batch important
    batchHttpLink
  ),
]);

关于javascript - 使用 ApolloLink.split 时处理 Apollo Client 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53062839/

相关文章:

jquery - 我可以动态更改 paho websocket 中订阅的主题吗?

javascript - Jquery 可排序事件未触发

php - 与本地存储的 session

java - GUI中的异常和显示错误消息

python - 我可以在Python中使用带有随机错误处理值的except函数吗?

javascript - WebSocket 立即关闭

javascript - jQuery-ui droppable 到 iframe 内可排序

javascript - 视觉 : Getting the router instance in children components

reactjs - React js 错误边界不适用于 Promise Catch

php - Ratchet Websockets over WSS on iis8