2016-11-02 6 views
23

ReadableStreamオブジェクトから情報を取得するにはどうすればよいですか?ReadableStreamオブジェクトからデータを取得しますか?

私はFetch APIを使用していますが、これはドキュメントから明らかではありません。

本文がReadableStreamとして返されているため、このストリーム内のプロパティにアクセスしたいだけです。私は、ブラウザの開発ツールの「レスポンス」の下で、この情報を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(); 
    }) 

ありがとうございます。

+1

[Body APIリファレンス](https://developer.mozilla.org/en/US/docs/Web/API/Body) –

+0

@FrancescoPezzellaレスポンスありがとうございます。私は 'response.Body.json()'を試しましたが、_italic_を取得しています。TypeError:未定義_italic_のプロパティ 'json'を読み込めません。 bodyUsedプロパティもfalseに設定されているため、これはですか? ブラウザの開発者ツールの[応答]タブでこの本文を表示できます。検索したいエラーメッセージがあります。 – noob

+0

問題は純粋にエラー400の状態に関連していますか?ハンドラを 'console.log(res.json());に変更するとどうなりますか?期待しているデータがありますか? –

答えて

35

ReadableStreamからデータにアクセスするには、変換方法の1つ(docs available here)を呼び出す必要があります。一例として、

fetch('https://jsonplaceholder.typicode.com/posts/1') 
    .then(function(response) { 
    // The response is a Response instance. 
    // You parse the data into a useable format using `.json()` 
    return response.json(); 
    }).then(function(data) { 
    // `data` is the parsed version of the JSON returned from the above endpoint. 
    console.log(data); // { "userId": 1, "id": 1, "title": "...", "body": "..." } 
    }); 

が、これは明確に物事をアップに役立ちます願っています。

+0

お返事ありがとうございます。私はこれを試して、res.bodyが未定義の場合と同じエラーが発生しています。私はres.statusで最初のthen()関数でステータスを取得することができます。本体だけがReadableStreamオブジェクトであるようです。本当に設定されているプロパティがロックされているようですか? – noob

+0

ここで 'res.body'にアクセスしようとしています(これは私の例の一部ではありません)。元の質問のサンプルコードを共有して、問題がどこにあるかを明確にすることができますか? –

+0

最初の.then()関数で返されたjsonレスポンスからres.bodyにアクセスしようとしました。元の質問にサンプルを追加してより明確にしました。ありがとう! – noob

9

res.json()は約束を返します。

var response = await fetch("https://httpbin.org/ip"); 
var body = await response.json(); // .json() is asynchronous and therefore must be awaited 

json()ReadableStreamからJSONオブジェクトに応答者の身体を変換します。試してみてください...

res.json().then(body => console.log(body)); 
+1

私はこれを試して、ボディの代わりにプロミスを印刷しました。 – reectrix

10

一部の人々は便利async例を見つけることができます。

awaitステートメントはasync関数にラップする必要がありますが、awaitステートメントはChromeのコンソール(バージョン62以降)で直接実行できます。

+4

コンソールプロンプトで実験するのに最適です。少ないタイピング。 – Amitabh

関連する問題