Heim > Web-Frontend > js-Tutorial > Warum gibt die .json()-Methode von Fetch manchmal ein Versprechen und manchmal einen Wert zurück?

Warum gibt die .json()-Methode von Fetch manchmal ein Versprechen und manchmal einen Wert zurück?

Mary-Kate Olsen
Freigeben: 2024-12-27 08:51:14
Original
659 Leute haben es durchsucht

Why Does Fetch's .json() Method Sometimes Return a Promise and Sometimes Return a Value?

Untersuchung des Promise-Verhaltens in der .json()-Methode von Fetch

Bei der Erkundung der Fetch-API tritt eine interessante Eigenart bei der .json()-Methode auf. Sehen wir uns genauer an, warum es unter bestimmten Umständen ein Versprechen und unter anderen einen direkten Wert zurückgibt.

Betrachten Sie den folgenden Ausschnitt:

fetch(url)
  .then(response => {
      return {
          data: response.json(),
          status: response.status
      }
  })
  .then(post => document.write(post.data));
Nach dem Login kopieren

Hier liefert post.data ein Versprechensobjekt, was darauf hindeutet Der .json()-Aufruf innerhalb des ersten .then()-Handlers gibt ein Versprechen zurück.

Wenn wir jedoch den Code so ändern, dass er einfach verkettet ist .json():

fetch(url)
  .then(response => response.json())
  .then(post => document.write(post.title));
Nach dem Login kopieren

Beitrag wird jetzt zu einem Objekt und ermöglicht den direkten Zugriff auf das Titelattribut.

Um dieses Rätsel zu lösen, müssen wir die Natur von Versprechen verstehen. .json() initiiert einen asynchronen Vorgang, um den HTTP-Antworttext als JSON abzurufen und ein Versprechen zurückzugeben. Dieses Versprechen stellt die eventuelle Verfügbarkeit der JSON-geparsten Daten dar.

Wenn das Versprechen von einem .then()-Handler zurückgegeben wird (wie im ersten Beispiel), bleibt das Versprechen innerhalb der Kette bestehen. Wenn jedoch ein Wert zurückgegeben wird (wie im zweiten Beispiel), gilt das Versprechen als „erfüllt“ und der zurückgegebene Wert wird als Ergebnis des äußeren .then() übernommen.

Um mit solchen Situationen umzugehen, Sie können die Versprechen entweder mit verschachtelten .then()s verketten:

fetch(url).then(response => 
    response.json().then(data => ({
        data: data,
        status: response.status
    })
).then(res => {
    console.log(res.status, res.data.title)
}));
Nach dem Login kopieren

Oder Sie verwenden moderne asynchrone Schlüsselwörter wie async und Warten:

const response = await fetch(url);
const data = await response.json();
console.log(response.status, data.title);
Nach dem Login kopieren

Denken Sie daran, immer den HTTP-Antwortstatus zu überprüfen, bevor Sie versuchen, den JSON zu analysieren, da dieser möglicherweise nicht immer im erwarteten Format vorliegt.

Das obige ist der detaillierte Inhalt vonWarum gibt die .json()-Methode von Fetch manchmal ein Versprechen und manchmal einen Wert zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage