リクエストステータスが400より大きい場合(400、423、429の状態を試しました)、フェッチは返されたJSONコンテンツを読み取ることができません。ブラウザコンソールに次のエラーが表示されます。
キャッチされない (promise 内) TypeError: 'Response' で 'json' を実行できませんでした: 本文ストリームがロックされています
返された応答オブジェクトの内容を次のように示しました。
しかし、数か月前はまだ使用できました。
私の質問は次のとおりです。
- これは Chrome ブラウザの動作によるものでしょうか、それともフェッチ標準の変更によるものでしょうか?
- これらの州の本文コンテンツを取得する方法はありますか?
PS: 私のブラウザのバージョンは Google Chrome 70.0.3538.102(正式バージョン) (64 位)です。
ベストアンサー1
私もこのエラーに遭遇しましたが、これはレスポンスの状態とは関係がないことがわかりました。実際の問題は、Response.json()
一度しか消費できないことです。複数回消費すると、エラーが発生します。
以下のように:
fetch('http://localhost:3000/movies').then(response =>{
console.log(response);
if(response.ok){
console.log(response.json()); //first consume it in console.log
return response.json(); //then consume it again, the error happens
}
したがって、解決策は、ブロックResponse.json()
内で複数回消費しないようにすることです。then