Как я могу получить информацию от ReadableStream
объекта?
Я использую Fetch API и не вижу, чтобы это было ясно из документации.
Тело возвращается как объект, ReadableStream
и я просто хотел бы получить доступ к свойству в этом потоке. В разделе «Ответ» в инструментах разработчика браузера я, кажется, организовал эту информацию в свойствах в форме объекта JavaScript.
fetch('http://192.168.5.6:2000/api/car', obj)
.then((res) => {
if(res.status == 200) {
console.log("Success :" + res.statusText); //works just fine
}
else if(res.status == 400) {
console.log(JSON.stringify(res.body.json()); //res.body is undefined.
}
return res.json();
})
javascript
node.js
reactjs
fetch
новичек
источник
источник
response.Body.json()
, но получаю курсив TypeError: невозможно прочитать свойство json с неопределенным курсивом . Это потому, что для свойства bodyUsed также установлено значение false? Однако я могу просмотреть это тело на вкладке ответа в инструментах разработчика браузера. Появляется сообщение об ошибке, которое я хотел бы получить.console.log(res.json());
? Вы видите ожидаемые данные?res.status == 200
?Ответы:
Чтобы получить доступ к данным из файла,
ReadableStream
вам необходимо вызвать один из методов преобразования (документы доступны здесь ).Например:
РЕДАКТИРОВАТЬ: если ваш тип возвращаемых данных не JSON или вы не хотите JSON, используйте
text()
Например:
Надеюсь, это поможет прояснить ситуацию.
источник
res.body
(это не часть моего примера)? Не могли бы вы поделиться образцом кода в исходном вопросе, чтобы было понятнее, где может быть ваша проблема.Некоторым может
async
пригодиться пример:json()
преобразует тело ответа из объектаReadableStream
json.Эти
await
заявления должны быть завернуты вasync
функции, однако вы можете запуститьawait
заявления непосредственно в консоли Chrome (в версии 62).источник
res.json()
возвращает обещание. Пытаться ...источник
.then
fetch(...).then(res => res.json()).then(data => console.log(data))
Немного опоздал на вечеринку, но возникли проблемы с получением чего-то полезного из
ReadableStream
пакетного запроса, созданного с помощью Odata $, с использованием Sharepoint Framework.Были проблемы, аналогичные OP, но решение в моем случае заключалось в использовании другого метода преобразования, чем
.json()
. В моем случае.text()
сработало как шарм. Однако, чтобы получить полезный JSON из текстового файла, потребовалось немного возиться.источник
return $data;
. Я наконец смог прочитать этот ответ в браузере сfetch(...).then(response => response.text()).then(data => console.log(data));
Если вы просто хотите получить ответ в виде текста и не хотите преобразовывать его в JSON, используйте https://developer.mozilla.org/en-US/docs/Web/API/Body/text, а затем
then
его, чтобы получить фактический результат обещания:или
источник
Мне не нравятся цепочки. Второй тогда не имеет доступа к статусу. Как было сказано ранее, response.json () возвращает обещание. Возврат тогда результата response.json () в a действует аналогично секунде then. У него есть дополнительный бонус, заключающийся в том, что он находится в рамках ответа.
источник
then
помогает вам получить окончательное разрешенное значение (body
). Их вложение не дает вам получитьbody
значение без обратного вызова или какого-либо механизма подобного рода. Представьте себе , это:let body = await fetch(...).then(res => res.json()).then(data => data)
. Это не будет работать вложенным способом. Чтобы проверить,response.status
вы всегда можетеthrow
создать исключение внутри первогоthen
и добавитьcatch
ко всей цепочке обещаний.Обратите внимание, что вы можете прочитать поток только один раз, поэтому в некоторых случаях вам может потребоваться клонировать ответ, чтобы повторно читать его:
источник