Warum nicht .json() zurück, ein Versprechen?
Ich ve wurde Herumspielen mit der fetch()
api vor kurzem, und bemerkte etwas, das war ein bisschen schrullig.
let url = "http://jsonplaceholder.typicode.com/posts/6";
let iterator = fetch(url);
iterator
.then(response => {
return {
data: response.json(),
status: response.status
}
})
.then(post => document.write(post.data));
;
post.data
gibt eine Promise
Objekt.
http://jsbin.com/wofulo/2/edit?js,Ausgabe
Aber wenn es geschrieben wird:
let url = "http://jsonplaceholder.typicode.com/posts/6";
let iterator = fetch(url);
iterator
.then(response => response.json())
.then(post => document.write(post.title));
;
post
hier ist ein standard - Object
die Sie Zugriff auf das title-Attribut.
http://jsbin.com/wofulo/edit?js,Ausgabe
Also meine Frage ist: warum tut response.json
Gegenzug ein Versprechen in ein Objekt-literal, sondern geben den Wert zurück, wenn nur zurückgegeben?
Das macht Sinn, wenn man bedenkt, das
Der Wert, der zurückgegeben wird, weil Versprechen wurde behoben, übergibt den Wert in der Antwort.json(). Jetzt wird der Wert steht in den then-Methode.
response.json()
Versprechen kann abgelehnt werden, wenn die Antwort nicht gültig ist JSON.Der Wert, der zurückgegeben wird, weil Versprechen wurde behoben, übergibt den Wert in der Antwort.json(). Jetzt wird der Wert steht in den then-Methode.
InformationsquelleAutor haveacigaro | 2016-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denn Sie erhalten die
response
wenn alle Header angekommen. Aufruf.json()
bekommt man eine Zusage für den body der http-response, die erst noch geladen werden. Siehe auch Warum ist das response-Objekt von JavaScript fetch API ein Versprechen?.Weil so verspricht die Arbeit. Die Fähigkeit zur Rückkehr Versprechungen der Rückruf und Sie verabschiedete Ihre wichtigsten feature, es macht Sie verkettbare ohne Verschachtelung.
Können Sie
oder jede andere von den Ansätze Zugriff auf frühere Versprechen Ergebnisse in einem .dann() Kette, um die Antwort status, nachdem er erwartete die json Körper.
JSON.parse()
stattres.json()
??im Grunde ist die Abkürzung für
res.text().then(JSON.parse)
. Beide warten Sie, bis die Daten mit einem Versprechen und Parsen der json.InformationsquelleAutor Bergi
Dieser Unterschied ist durch das Verhalten der mehr Verspricht als
fetch()
speziell.Wenn ein
.then()
callback gibt eine zusätzlichePromise
die nächsten.then()
Rückruf in der Kette ist im wesentlichen gebunden an das Versprechen, erhalten Ihre Lösung oder Erfüllung ablehnen und Wert.Dem 2. snippet hätte auch geschrieben werden als:
In diesem Formular und Ihnen, den Wert der
post
wird durch das Versprechen zurück vonresponse.json()
.Zurückkehren, wenn Sie eine Ebene
Object
, obwohl.then()
ist der Auffassung, dass ein erfolgreiches Ergebnis und löst sich sofort, ähnlich:post
in diesem Fall ist einfach dieObject
Sie erstellt haben, enthält einePromise
in seinerdata
Eigenschaft. Die warten, dass Versprechen erfüllt werden, ist noch unvollständig.InformationsquelleAutor Jonathan Lonowski
Auch, was mir geholfen zu verstehen, diese Besondere Szenario, das Sie beschrieben, ist das Versprechen API Dokumentation, besonders dort, wo es erklärt, wie versprochen, zurück durch die
then
Methode gelöst werden unterschiedlich, je nachdem, was die handler fn gibt:InformationsquelleAutor Gera Zenobi
Zusätzlich zu den oben genannten Antworten hier ist, wie Sie möglicherweise behandeln ein 500-Serie-Antwort von der api, wo Sie eine Fehlermeldung erhalten, codiert im json-Format:
InformationsquelleAutor jcroll