Ich habe vor kurzem mit der fetch() api herumgespielt, und bemerkte etwas, das ein bisschen skurril war.Warum gibt .json() ein Versprechen zurück, wenn es sich in einem Objektliteral befindet?
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 ein Zusicherungsobjekt zurück. http://jsbin.com/wofulo/2/edit?js,output
Allerdings, wenn es geschrieben wird als:
let url = "http://jsonplaceholder.typicode.com/posts/6";
let iterator = fetch(url);
iterator
.then(response => response.json())
.then(post => document.write(post.title));
;
Beitrag hier ein Standard-Objekt, mit dem Sie den Titel-Attribut zugreifen können. http://jsbin.com/wofulo/edit?js,output
Also meine Frage ist: Warum tut response.json ein Versprechen in einem Objektliteral zurück, aber den Wert zurück, wenn gerade zurückgekehrt?
Dies ist sinnvoll, wenn Sie in Betracht ziehen, dass die Antwort "response.json()" möglicherweise abgelehnt wird, wenn die Antwort nicht gültig ist JSON. – ssube
Der Wert wird zurückgegeben, weil das Versprechen gelöst wurde und der Wert in response.json() übergeben wurde. Jetzt ist der Wert in der then-Methode verfügbar. –