Heim > Web-Frontend > js-Tutorial > Warum weist die Methode „.json()' der Fetch-API unterschiedliche Promise-Verhaltensweisen auf?

Warum weist die Methode „.json()' der Fetch-API unterschiedliche Promise-Verhaltensweisen auf?

Patricia Arquette
Freigeben: 2024-12-31 19:08:12
Original
773 Leute haben es durchsucht

Why Does Fetch API's `.json()` Method Have Different Promise Behaviors?

Promise-Handhabung in der Fetch-API: Warum sich das Verhalten von .json() unterscheidet

Beim Arbeiten mit der fetch()-API tritt ein subtiler Unterschied im Verhalten auf, wenn die .json()-API verwendet wird. json()-Methode. Dieses Verhalten mag kontraintuitiv erscheinen, also schauen wir uns die zugrunde liegenden Gründe genauer an.

Promise-Natur von .json()

Standardmäßig gibt .json() ein Versprechen zurück, das in die analysierte JSON-Antwort aufgelöst wird Körper. Dies liegt daran, dass der Antworttext möglicherweise nicht sofort verfügbar ist, insbesondere bei großen Antworten oder langsamen Verbindungen. Das Versprechen stellt sicher, dass der nachfolgende Code erst ausgeführt wird, wenn der JSON vollständig analysiert ist.

Versprechensverkettung und Wertrückgabe

Wenn .json() innerhalb einer .then()-Kette verwendet wird, Es gibt das Promise-Objekt selbst zurück und ermöglicht so die Verkettung weiterer Operationen. Wenn .json() jedoch direkt vom .then()-Handler zurückgegeben wird, wird stattdessen der aufgelöste Wert des Versprechens (der analysierte JSON) zurückgegeben. Dies liegt daran, dass der .then()-Handler erwartet, einen Wert zu erhalten, der weiter manipuliert werden kann.

Beispiel:

Im bereitgestellten Codeausschnitt:

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

Die .json()-Methode ist in einem Objektliteral verkettet, sodass sie ein Promise-Objekt zurückgibt, was dazu führt, dass das post.data-Attribut ein ist Versprochen.

Alternative Syntax:

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

In diesem Beispiel wird .json() direkt vom .then()-Handler zurückgegeben, also der aufgelöste JSON-Wert wird sofort zurückgegeben und ermöglicht den direkten Zugriff auf das post.title-Attribut.

Promise Chaining und Nested Versprechen

Um die Diskrepanz zwischen Objektliteralen und direkten Rückgabewerten zu vermeiden, können Sie die folgende Syntax verwenden:

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

Dieser Ansatz gibt ein verschachteltes Versprechen zurück, das letztendlich zum gewünschten Objekt aufgelöst wird.

Fazit

Das Promise-Verhalten von .json() hängt davon ab, wie es im Code verwendet wird. Beim Verketten von Vorgängen wird ein Promise-Objekt zurückgegeben, um die richtige Reihenfolge sicherzustellen. Wenn Sie jedoch .json() direkt von einem .then()-Handler zurückgeben, wird der aufgelöste Wert (geparstes JSON) zurückgegeben, was eine sofortige Verwendung ermöglicht. Das Verständnis dieses Unterschieds ist entscheidend für die Verwaltung von Versprechen und die Vermeidung unerwarteten Verhaltens in Ihrem Code.

Das obige ist der detaillierte Inhalt vonWarum weist die Methode „.json()' der Fetch-API unterschiedliche Promise-Verhaltensweisen auf?. 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