Heim >Web-Frontend >js-Tutorial >Warum gibt „fetch().then().json()' manchmal ein Versprechen zurück und manchmal nicht?
Warum gibt .json() ein Versprechen zurück, aber nicht, wenn es durch .then() geht?
Frage:
Bei der Verwendung der Fetch-API wurde beobachtet, dass die .json()-Methode ein Promise-Objekt zurückgibt, wenn sie innerhalb eines verwendet wird Objektliteral in einem .then()-Handler. Bei Verwendung ohne Objektliteral wird der Wert jedoch direkt zurückgegeben.
Antwort:
Bezüglich Versprechen:
.json() gibt ein Promise zurück, da die HTTP-Antwort empfangen wird, wenn die Header verfügbar sind, der Body (in diesem Fall JSON) jedoch noch nicht geladen ist. .json() ruft ein zweites Versprechen für den Körper ab, das separat geladen werden muss.
Bezüglich des Verhaltens von .then():
Wenn ein Versprechen von a zurückgegeben wird .then() Rückruf, es wird von der äußeren Kette übernommen. Das bedeutet, dass das äußere .then() den erfüllten Wert des inneren Promise erhält. Im gegebenen Beispiel empfängt das äußere .then() ein Objekt mit den Daten- und Statuseigenschaften, wodurch die Dateneigenschaft effektiv direkt in .then() verfügbar gemacht wird.
Alternative Lösungen:
Um sowohl auf den Status als auch auf JSON-Daten direkt in einem .then()-Handler zuzugreifen, können Sie Folgendes verwenden Techniken:
fetch(url) .then(response => response.json()) .then(data => { console.log(response.status, data.title); });
const response = await fetch(url); const data = await response.json(); console.log(response.status, data.title);
Denken Sie daran, den Antwortstatus zu überprüfen, bevor Sie den Text lesen, da dieser möglicherweise nicht immer JSON enthält Daten.
Das obige ist der detaillierte Inhalt vonWarum gibt „fetch().then().json()' manchmal ein Versprechen zurück und manchmal nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!