¿Cómo puedo obtener información de un ReadableStreamobjeto?
Estoy usando la API Fetch y no veo que esto esté claro en la documentación.
El cuerpo se devuelve como ReadableStreamay 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();
})
javascript
node.js
reactjs
fetch
novato
fuente
fuente

response.Body.json(), pero me está apareciendo TypeError en cursiva : no se puede leer la propiedad 'json' de cursiva indefinida . ¿Es esto porque la propiedad bodyUsed también se establece en falso? Sin embargo, puedo ver este cuerpo en la pestaña de respuesta en las herramientas de desarrollo del navegador. Hay un mensaje de error que me gustaría recuperar.console.log(res.json());? ¿Ves los datos que esperas?res.status == 200?Respuestas:
Para acceder a los datos desde un
ReadableStreamdebe llamar a uno de los métodos de conversión (documentos disponibles aquí ).Como ejemplo:
EDITAR: si su tipo de retorno de datos no es JSON o no desea JSON, use
text()Como ejemplo:
Espero que esto ayude a aclarar las cosas.
fuente
res.body(esto no es parte de mi ejemplo)? ¿Puede compartir algún código de muestra en su pregunta original para aclarar dónde podría estar su problema?Algunas personas pueden encontrar un
asyncejemplo útil:json()convierte el cuerpo de la respuesta deReadableStreama en un objeto json.Las
awaitdeclaraciones deben estar envueltas en unaasyncfunción, sin embargo, puede ejecutarlasawaitdirectamente en la consola de Chrome (a partir de la versión 62).fuente
res.json()devuelve una promesa Tratar ...fuente
.thenllamadas:fetch(...).then(res => res.json()).then(data => console.log(data))Un poco tarde para la fiesta, pero tuve algunos problemas para obtener algo útil de un
ReadableStreamLlegó un solicitud producida a partir de un 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ó a las mil maravillas. Sin embargo, fue necesario jugar un poco para obtener algunos JSON útiles del archivo de texto.fuente
return $data;. Finalmente pude leer esta respuesta en el navegador confetch(...).then(response => response.text()).then(data => console.log(data));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
thenpara obtener la respuesta real resultado de la promesa:o
fuente
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.
fuente
thenayuda a recuperar el valor final resuelto (elbody). Anidarlos evita que pueda obtener elbodyvalor sin una devolución de llamada o algún mecanismo de este tipo. Imagínese esto:let body = await fetch(...).then(res => res.json()).then(data => data). Esto no funcionaría de la manera anidada. Para verificarloresponse.status, siempre puede hacerthrowuna excepción dentro de la primeratheny agregar unacatcha toda la cadena de promesa.Tenga en cuenta que solo puede leer una secuencia una vez, por lo que en algunos casos, es posible que deba clonar la respuesta para leerla repetidamente:
fuente