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.
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.
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));
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));
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.
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 })
Dieser Ansatz gibt ein verschachteltes Versprechen zurück, das letztendlich zum gewünschten Objekt aufgelöst wird.
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!