JavaScript フェッチ - 'Response' で 'json' を実行できませんでした: 本文ストリームがロックされています 質問する

JavaScript フェッチ - 'Response' で 'json' を実行できませんでした: 本文ストリームがロックされています 質問する

リクエストステータスが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

おすすめ記事