Heim >Web-Frontend >js-Tutorial >Warum gibt „fetch().then().json()' manchmal ein Versprechen zurück und manchmal nicht?

Warum gibt „fetch().then().json()' manchmal ein Versprechen zurück und manchmal nicht?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-11 14:19:11394Durchsuche

Why Does `fetch().then().json()` Sometimes Return a Promise and Sometimes Not?

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:

  • Verschachtelte .then()-Blöcke verwenden:
fetch(url)
  .then(response => response.json())
  .then(data => {
    console.log(response.status, data.title);
  });
  • Async/await verwenden (erfordert eine asynchrone Funktion):
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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn