Cuando el estado de la solicitud es superior a 400 (he intentado 400, 423, 429 estados), fetch no puede leer el contenido json devuelto. El siguiente error se muestra en la consola del navegador
No detectado (en promesa) TypeError: No se pudo ejecutar 'json' en 'Respuesta': la transmisión del cuerpo está bloqueada
Mostré el contenido del objeto de respuesta devuelto de la siguiente manera:
Pero todavía puedo usarlo hace unos meses.
Mi pregunta es la siguiente:
- ¿Es esto solo el comportamiento del navegador Chrome o los cambios estándar de recuperación?
- ¿Hay alguna forma de obtener el contenido corporal de estos estados?
PD: la versión de mi navegador es Google Chrome 70.0.3538.102 (正式 版本) (64 位)
javascript
fetch-api
Luna
fuente
fuente
Respuestas:
También encontré este error pero descubrí que no está relacionado con el estado de Respuesta, el verdadero problema es que solo puedes consumir
Response.json()
una vez, si lo estás consumiendo más de una vez, el error ocurrirá.como abajo:
Entonces la solución es evitar consumir
Response.json()
más de una vez enthen
bloque.fuente
response.clone()
antes de consumirlo.console.log(r.json()); return r.json();
que lo rompió.Usar
Response.clone()
para clonarResponse
ejemplo
fuente
Response.body
, se bloquea para ese lector. Pero por lo que puedo ver (al menos en mi código), nada ha comenzado a leerse ... ¿hay una explicación de cómo la secuencia legible podría bloquearse automáticamente?El método de respuesta como 'json', 'text' se puede llamar una vez y luego se bloquea. La imagen de respuesta publicada muestra que el cuerpo está bloqueado. Esto significa que ya ha llamado al 'entonces', 'captura'. Para volver a amar esto, puede intentar lo siguiente.
O
fuente
Sé que es demasiado tarde pero puede ayudar a alguien:
fuente
Yo también me metí en esto. Pero esto funcionó para mí.
buena suerte
fuente
Estaba reutilizando accidentalmente un objeto de respuesta, algo similar a esto:
Esta línea:
Debería haber sido (respuesta2 en lugar de la respuesta1 agotada):
Reutilizar la respuesta anterior no tenía sentido y fue un error tipográfico de código sucio ...
fuente
Esto funcionó para mi
fuente
Como se menciona en la pregunta cuando intenta utilizar el mismo objeto de respuesta, su cuerpo está a punto de bloquearse debido al estado del objeto. Lo que puede hacer es capturar el valor del objeto de respuesta y luego intentar tener alguna operación en él (. Then ()). Siga el código a continuación,
fuente