readable body javascript node.js reactjs fetch

javascript - body - ¿Recuperar datos de un objeto ReadableStream?



fetch stream javascript (6)

¿Cómo puedo obtener información de un objeto ReadableStream?

Estoy usando la API Fetch y no veo que esto esté claro en la documentación.

El cuerpo se devuelve como ReadableStream y simplemente me gustaría acceder a una propiedad dentro de esta secuencia. En Respuesta en las herramientas de desarrollo del navegador, parece que tengo esta información organizada en propiedades, en forma de un objeto 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(); })

Gracias por adelantado.


Algunas personas pueden encontrar útil un ejemplo async :

var response = await fetch("https://httpbin.org/ip"); var body = await response.json(); // .json() is asynchronous and therefore must be awaited

json() convierte el cuerpo de la respuesta de un ReadableStream a un objeto json.

Las declaraciones de await deben estar envueltas en una función async , sin embargo, puede ejecutar las declaraciones de await directamente en la consola de Chrome (a partir de la versión 62).


No me gustan los encadenamientos. El segundo entonces no tiene acceso al estado. Como se indicó antes, ''response.json ()'' devuelve una promesa. Devolver el resultado de ''response.json ()'' en un acto similar a un segundo entonces. Tiene la ventaja adicional de estar dentro del alcance de la respuesta.

return fetch(url, params).then(response => { return response.json().then(body => { if (response.status === 200) { return body } else { throw body } }) })


Para acceder a los datos de un ReadableStream , debe llamar a uno de los métodos de conversión (documentos disponibles aquí ).

Como ejemplo:

fetch(''https://jsonplaceholder.typicode.com/posts/1'') .then(function(response) { // The response is a Response instance. // You parse the data into a useable format using `.json()` return response.json(); }).then(function(data) { // `data` is the parsed version of the JSON returned from the above endpoint. console.log(data); // { "userId": 1, "id": 1, "title": "...", "body": "..." } });

EDITAR: si su tipo de retorno de datos no es JSON o no desea JSON, use text()

Como ejemplo:

fetch(''https://jsonplaceholder.typicode.com/posts/1'') .then(function(response) { return response.text(); }).then(function(data) { console.log(data); // this will be a string });

Espero que esto ayude a aclarar las cosas.


Si solo desea la respuesta como texto y no desea convertirla en JSON, use https://developer.mozilla.org/en-US/docs/Web/API/Body/text y luego para obtener el resultado real de la promesa:

fetch(''city-market.md'') .then(function(response) { response.text().then((s) => console.log(s)); });

o

fetch(''city-market.md'') .then(function(response) { return response.text(); }) .then(function(myText) { console.log(myText); });


Un poco tarde para la fiesta, pero tuve algunos problemas para obtener algo útil de un ReadableStream producido a partir de una solicitud de lote de Odata $ usando el Marco de Sharepoint.

Tuve problemas similares a los de OP, pero la solución en mi caso fue usar un método de conversión diferente que .json (). En mi caso .text () funcionó de maravilla. Sin embargo, fue necesario realizar algunos ajustes para obtener algunos JSON útiles del archivo de texto.


res.json() devuelve una promesa. Tratar ...

res.json().then(body => console.log(body));