2016-04-08 6 views
2

Я использую API-интерфейс fetch для вызова запроса сервера в своем собственном приложении React. Но, Мое приложение занимает 50 секунд, чтобы вызвать функцию then после получения ответа от сервера. Я делаю какую-либо ошибку или обещаю работать очень медленно?Слишком много времени, чтобы вызвать функцию обещания

fetch(url, { 
     method: 'POST', 
     headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/x-www-form-urlencoded', 
     }, 
     body: bodyContent 
    }.then((responseText) => { 
     console.log(responseText); 
     responseText.json().then(function(response){ 
      console.log(response); 
     }); 
    }); 

response печатает в журнале 50 секунд после responseText

UPDATE: Только сейчас обнаружил, что responseText.json() обещание выполняется только после того, как я нажимаю на экране снова. Эта проблема странная.

+0

Что вы посмотрели на запрос выяснить, где проблема? – epascarello

+0

Я видел консольный журнал. Его зарегистрированный ответText сначала, и он зарегистрировал ответ через 50 минут. – Sriraman

+0

Итак, что занимает так много времени с запросом, сетевая панель покажет вам некоторые детали, но вам, вероятно, нужно посмотреть журналы серверов, чтобы узнать, что там проблема. Если проблема в ответном обратном ответе, какой большой ответ, который возвращается, что требуется навсегда для синтаксического анализа? – epascarello

ответ

2

Наконец-то я нашел решение этой проблемы. Это из-за Chrome Debugging. Если я остановлю хром-отладку, он работает нормально. Если работает отладчик Chrome, я должен нажать на экран для возвращаемого значения. Итак, проигнорируйте эту задержку, если вы используете хром-отладчик.

1

обещание немного медленнее, чем обратный вызов. Но не 50 секунд! Я думаю, что у вас проблемы с подключением к Интернету.

+0

Нет. Если проблема связана с подключением к Интернету, тогда потребуется больше времени для печати самого ответа. Это обещание просто извлекает ответ из responseText. – Sriraman

+0

, тогда проблема responseText.then() может быть, данные слишком долго экспортируются из БД или другого выражения с сервера. Вы можете измерить, как долго ваш код работает в бэкэнд. –

+0

Если вы используете реакцию родной, возможно, проблема с ней. может быть, эта проблема с .then (.then()) –

0

Попробуйте открыть свой веб-набор разработчика из своего браузера (обычно клавиша F12) и перейдите на вкладку сети.

Вы можете видеть время, которое делает ваш запрос. Если это займет много времени, это либо ваше сетевое соединение, либо сервер, на котором установлен отложенный ответ.

Если нет, это клиентская сторона.

+0

Я создаю реактивное родное приложение. Не нормальное веб-приложение. Таким образом, я не могу видеть эти вещи на вкладке сети. – Sriraman

2

Поскольку мы сузили его до вызова json(), который занимает слишком много времени, кажется, что это проблема (https://github.com/facebook/react-native/issues/6418), которая не часто бывает и пока не воспроизводится. Это может иметь отношение к структуре или размеру вашего объекта json.

Лично я использую конструкцию кода, которую вы используете довольно активно в моих собственных приложениях, и нет штрафа за производительность. Тем не менее, мой типичный ответ довольно мал и прост (например, список из 10 объектов с примерно 20 ключами, без вложенности и т. Д.)

Вы можете попробовать предложение в отчете о проблемах, с которым я связан, и использовать responseText.text() и сравнить производительность.

0

Я столкнулся с той же проблемой, ответText возвращается сразу в миллисекундах, но когда он конвертируется в json с использованием .json(), это занимает несколько секунд, интересно, если я нажму экран на протяжении. json(), он сразу возвращает данные json.

+0

Я также сталкиваюсь с такой же проблемой. – Sriraman

+0

Я нашел решение. Проверьте мой ответ. Это из-за отладки Chrome. :) – Sriraman

+0

Команда RN уже исправила это –