Может ли кто-нибудь выделить разницу между этими двумя фрагментами кода в 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-й фрагмент печатает неопределенное.
Обновлено: мой вопрос не о том, «почему ответ дает обещание, а не обычный объект». Это больше о том, каковы последствия ответа, возвращающего обещание.
Как вы отметили, посмотрите использование fetch-api developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Вы можете использовать console.info(response.data.content); в первом фрагменте для работы
@CyberAbhay в первом фрагменте, console.info(response.data.content не работает, поскольку ответ все еще является обещанием.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Фрагмент ниже не работает, потому что 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)})
Это действительно не имеет отношения к моему вопросу.
Спасибо за ваш комментарий. Пожалуйста, проверьте мой отредактированный ответ
См. stackoverflow.com/questions/37555031/… и stackoverflow.com/questions/39435842/… (и многие другие существующие вопросы и ответы о переполнении стека, где это уже объяснено)