234 votes

Récupérer des données à partir d'un ReadableStream objet?

Comment puis-je obtenir des informations à partir d'un ReadableStream objet?

Je suis à l'aide de l'Extraction de l'API et je ne vois pas cela pour être clair à partir de la documentation.

Le corps est retourné comme un ReadableStream et je voudrais simplement d'accéder à une propriété dans ce flux. En vertu de Réponse dans le navigateur outils de dev, je semblent avoir cette information organisées dans les propriétés, sous la forme d'un objet 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();
    })  

Merci à l'avance.

292voto

Afin d'accéder aux données à partir d'un ReadableStream vous devez appeler l'une des méthodes de conversion (docs disponible ici).

À titre d'exemple:

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": "..." }
  });

Espérons que cela aide à clarifier les choses.

69voto

Noel Points 528

Certaines personnes peuvent trouver un async exemple utile:

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

json() convertit la réponse de l'organisme à partir d'un ReadableStream pour un objet json.

L' await des déclarations doit être enveloppé dans un async fonctionner, cependant, vous pouvez exécuter await états directement dans la console de Chrome (à partir de la version 62).

34voto

pinoyyid Points 4390

res.json() retourne une promesse. Essayez ...

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

17voto

Dan Mehlqvist Points 69

Peu en retard à la fête, mais certains avaient des problèmes avec l'obtention de quelque chose d'utile à partir d'un ReadableStream produites à partir d'un Odata $lot de demande d'utilisation de l'infrastructure Sharepoint.

Eu des problèmes similaires que l'OP, mais la solution dans mon cas était d'utiliser une autre méthode de conversion de .json(). Dans mon cas .texte() a fonctionné comme un charme. Certains tripoter était cependant nécessaire pour obtenir quelque chose d'utile JSON à partir du fichier texte.

11voto

AlexChaffee Points 2979

Si vous voulez juste la réponse sous forme de texte et ne veulent pas se convertir en JSON, l'utilisation https://developer.mozilla.org/en-US/docs/Web/API/Body/text et puis, then pour obtenir le résultat réel de la promesse:

fetch('city-market.md')
  .then(function(response) {
    response.text().then((s) => console.log(s));
  });

ou

fetch('city-market.md')
  .then(function(response) {
    return response.text();
  })
  .then(function(myText) {
    console.log(myText);
  });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X