2016-05-20 9 views
1

Ich versuche zu sehen, wie browsereigene Webapi fetch() API funktioniert. Bisher habe ich das: Sample-Code und es funktioniert gut. Aber was ich nicht verstehe, warum ist es Streaming String, den ich in ein JSON konvertieren muss? Ich bin nicht sicher, warum jemand überhaupt einen JSON als Zeichenkette durch eine REST API streamen müsste? Ich bin mir ziemlich sicher, dass ich hier etwas verpasse, aber ich bin mir nicht sicher, wie ich fetch() sagen sollte, um die Antwort als JSON zu erhalten und nicht als ReadableByteStream, die ich in eine Zeichenfolge konvertieren und für JSON parsen muss.Mit fetch() Webapi

Meine Frage ist,

  1. Warum ist ein string hier gestreamt werden?
  2. Wie kann ich fetch() sagen, um meine Antwort als Text oder JSON abzurufen, so dass ich response.json() oder response.text() wie in der erwähnt tun kann? (Zu Ihrer Information habe ich versucht, ein Header-Objekt hinzufügen und eine Header Instanz erstellen und weitergeben zu fetch() weder verändert meine Antwort.
+0

In welchem ​​Browser machst du das? Nicht alle [Browser] (http://caniuse.com/#feat=fetch) haben 'fetch' bereits eingebaut. Sie sollten das ['fetch polyfill'] (https://github.com/github/fetch) einschließen, was ebenfalls ein' promise polyfill' erfordert. – KevBot

+0

Ich verwende gerade die Chrome-Version 50.0.2661.94 (64-Bit). – Ajai

Antwort

3

Alles, was Sie tun müssen, ist anrufen

fetch("https://api.github.com/users/ajainarayanan").then(res => res.json()); 

Hier einige modifizierte Code der hat das gleiche Ergebnis

fetch("https://api.github.com/users/ajainarayanan") 
    .then(res => res.json()) 
    .then(res => console.log('Profile: ', JSON.stringify(res, null, 2))); 
+0

Nicht sicher, ob Sie das versucht haben, aber das war das erste, was ich ausprobiert habe und es hat nicht funktioniert. – Ajai

+0

Es funktioniert für mich. Welchen Fehler bekommst du? – Thomas

+0

Ich habe den von Ihnen gesendeten Link bearbeitet und es funktioniert genau wie erwartet – aray12

0

Anscheinend habe ich response.json() in einem then Handler und haben den aktuellen Wert in nachfolgendenzu tunHandler. Update-code. Was ich nicht realisiert habe, war response.json(), ein weiterer Promise, den ich wie ein Versprechen behandeln sollte. So wird console.log(response.json()) natürlich einfach nur ein JSON-Objekt an Stelle meines tatsächlichen JSON loggen. Danke dir @ aray12 für deine Antwort. Ich erkannte die Antwort nicht, bis ich erkannte, dass .json() ein Versprechen zurück gab.

PS: Hinzufügen dieser als eine Antwort, wie ich dies in Kommentaren nicht hinzufügen konnte.