Сетевой запрос не выполнен с реакции-нативным и graphql - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть приложение-ответ, которое имеет клиент GraphQL для получения контента с моего сервера на Heroku.

Вот так выглядит мой клиент GraphQL в приложении:

// API_ENDPOINT: https://my-app.herokuapp.com
const httpLink = new HttpLink({ uri: config.API_ENDPOINT });

const authLink = setContext((_, { headers }) => ({
  headers: {
    ...headers,
    'x-api-key': config.API_TOKEN,
  },
}));

const errorLink = onError(({ operation, response, graphQLErrors, networkError }) => {
  if (graphQLErrors) {
    graphQLErrors.forEach(({ message, locations, path, code }: any) => {
      errorLog(
        `GraphQL error, operation: ${operation.operationName}, variables: ${JSON.stringify(
          operation.variables,
        )}, message: ${JSON.stringify(message)}, location: ${JSON.stringify(locations)}, path: ${JSON.stringify(
          path,
        )}, code: ${JSON.stringify(code)}`,
      );
    });
  }

  if (networkError) {
    errorLog(
      `Network error, error: ${networkError}, operation: ${operation.operationName}, variables: ${JSON.stringify(
        operation.variables,
      )}, response: ${JSON.stringify(response)}, code: ${JSON.stringify(
        get(networkError, 'statusCode'),
      )}, graphqlerrors: ${JSON.stringify(graphQLErrors)}`,
    );
  }
});

const link = ApolloLink.from([errorLink, authLink, httpLink]);
const cache = new InMemoryCache();

export const client = new ApolloClient({
  link,
  cache,
  defaultOptions: {
    query: {
      errorPolicy: 'ignore',
    },
  },
});

затем, чтобы извлечь данные и сохранить их на пользовательском устройстве, я использую mobx-state-tree, это выглядит так:

fetch: flow(function* fetch(): any {
  self.isLoading = true;

  const { data, loading } = yield client.query({
    query: QUERY,
    fetchPolicy: 'network-only',
  });

  if (!data) {
    self.isLoading = false;

    return;
  }

  try {
    self.now = NowModel.create(data);
  } catch (e) {
    errorLog(`Cannot create NowModel: ${e}, ${JSON.stringify(now)}`);
  }

  self.isLoading = loading;
}),

Хорошо, это было введение, давайте поговорим о проблеме сейчас.

Я пробовал приложение на нескольких устройствах в режиме выпуска, и у меня не было никаких проблем. Я использую Sentry для получения отчетов о проблемах, и я получил много ошибок, связанных с проблемами сети (и с другими запросами):

Network error, error: TypeError: Network request failed, operation: myQuery, variables: undefined, response: undefined, code: undefined, graphqlerrors: undefined

Я также проверил журналы на сервере, и у меня нетна любые проблемы или ошибки в запросах все они отвечают со статусом 200.

Я подозреваю, что это может быть связано с fetchPolicy: 'network-only' или errorPolicy: 'ignore', не будучи уверенным. Может ли быть так, что когда приложение переходит в фоновое состояние пользовательского устройства, оно переходит в странное состояние для клиента graphql? или может быть, что пользователь пытается загрузить данные, когда он не подключен к Интернету?

заранее спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...