Quando o status da solicitação é superior a 400 (tentei 400, 423, 429 estados), a busca não pode ler o conteúdo json retornado. O seguinte erro é exibido no console do navegador
Não capturado (em promessa) TypeError: Falha ao executar 'json' em 'Resposta': fluxo de corpo está bloqueado
Mostrei o conteúdo do objeto de resposta retornado da seguinte maneira:
Mas ainda posso usar há alguns meses.
Minha pergunta é a seguinte:
- É apenas o comportamento do navegador Chrome ou as alterações do padrão de busca?
- Existe alguma maneira de obter o conteúdo corporal desses estados?
PS: a versão do meu navegador é Google Chrome 70.0.3538.102 (正式 版本) (64 位)
javascript
fetch-api
Luna
fonte
fonte
Respostas:
Encontrei esse erro também mas descobri que não está relacionado ao estado de Response, o verdadeiro problema é que você só pode consumir
Response.json()
uma vez, se estiver consumindo mais de uma vez, o erro vai acontecer.como abaixo:
Portanto, a solução é evitar consumir
Response.json()
mais de uma vez emthen
bloco.fonte
response.clone()
antes de consumir.console.log(r.json()); return r.json();
que quebrou.Use
Response.clone()
para clonarResponse
exemplo
fonte
Response.body
, ele fica preso a esse leitor. Mas pelo que posso ver (pelo menos no meu código), nada começou a ser lido ... há uma explicação de como o fluxo legível pode ser bloqueado automaticamente?O método de resposta como 'json', 'texto' pode ser chamado uma vez e, em seguida, é bloqueado. A imagem de resposta postada mostra que o corpo está bloqueado. Isso significa que você já chamou o 'então', 'pegar'. Para resolver isso, você pode tentar o seguinte.
Ou
fonte
Eu sei que é tarde demais, mas pode ajudar alguém:
fonte
Eu também me empenhei nisso. Mas isso funcionou para mim.
boa sorte
fonte
Eu estava reutilizando acidentalmente um objeto de resposta, algo semelhante a isto:
Está linha:
Deveria ter sido (resposta2 em vez da resposta usada 1):
Reutilizar a resposta anterior não fazia sentido e era um erro de digitação de código ...
fonte
Isso funcionou para mim
fonte
Conforme mencionado na pergunta, quando você está tentando usar o mesmo objeto de resposta, seu corpo está prestes a travar devido ao estado do objeto. O que você pode fazer é capturar o valor do objeto de resposta e, em seguida, tentar fazer alguma operação nele (.então ()). Siga o código abaixo,
fonte