Использование ответа в React

Может ли кто-нибудь выделить разницу между этими двумя фрагментами кода в React?

window.fetch(url)
  .then((response) => {
    console.info(response.json().content);
})

и

window.fetch(url)
  .then((response) =>  response.json())
  .then((data) =>{
    console.info(data.content);
})

response contains a Java object and content is one of the fields in that object.

Второй фрагмент печатает правильное значение содержимого, тогда как 1-й фрагмент печатает неопределенное.

Обновлено: мой вопрос не о том, «почему ответ дает обещание, а не обычный объект». Это больше о том, каковы последствия ответа, возвращающего обещание.

См. stackoverflow.com/questions/37555031/… и stackoverflow.com/questions/39435842/… (и многие другие существующие вопросы и ответы о переполнении стека, где это уже объяснено)

sideshowbarker 29.01.2019 06:54

Как вы отметили, посмотрите использование fetch-api developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fet‌​ch

Teoman shipahi 29.01.2019 06:54

Вы можете использовать console.info(response.data.content); в первом фрагменте для работы

CyberAbhay 29.01.2019 07:11

@CyberAbhay в первом фрагменте, console.info(response.data.content не работает, поскольку ответ все еще является обещанием.

Ketan R 30.01.2019 06:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Фрагмент ниже не работает, потому что response.json() возвращает обещание, а не простой объект, поэтому во втором фрагменте он возвращает правильное значение, поскольку вы using .then, чтобы получить значение

window.fetch(url)
  .then((response) => {
    console.info(response.json().content); // response.json() is not an object but a promise and hence you can't access content from it directly
})

Второй фрагмент эквивалентен

window.fetch(url)
  .then((response) => {
    response.json().then((content) => console.info(content)); 
})

но можно упростить цепочку обещаний, вернув response.json() promise из первого .then, как показано во втором фрагменте.

Это связано с тем, что response.json() возвращает обещать. Поскольку он возвращает обещание, для перехвата его ответа используется другой then. Дополнительную информацию о обещаниях можно найти здесь.

При использовании javascript fetch вам необходимо преобразовать ответ в json с помощью response.json(). Вы можете пропустить дополнительный шаг преобразования ответа в json, используя аксиомы, например.

axios.get(url)
  .then(res => {console.info(res)})

Это действительно не имеет отношения к моему вопросу.

Ketan R 30.01.2019 06:11

Спасибо за ваш комментарий. Пожалуйста, проверьте мой отредактированный ответ

Umair Farooq 30.01.2019 06:24

Другие вопросы по теме