Einblick in Versprechen und Versprechensverkettung bei der Verarbeitung von Fetch-Antworten
Beim Experimentieren mit der fetch()-API ergab sich eine interessante Beobachtung bezüglich des Verhaltens von .json().
Beobachtung:
Bei der Rückgabe von „response.json()“ innerhalb eines an .then() übergebenen Objektliterals wird ein Promise-Objekt erhalten. Wenn es jedoch direkt vom .then()-Handler zurückgegeben wird, wird der tatsächliche Wert zurückgegeben.
Erklärung:
Der Aufruf von „response.json“ ruft ein weiteres Versprechen für den HTTP-Antworttext ab ist noch nicht geladen. Dies liegt daran, dass Sie das Antwortobjekt erhalten, sobald Header empfangen werden, der Text jedoch noch nicht verfügbar ist.
Dies ist ein grundlegender Aspekt von Versprechen. Versprechen ermöglichen eine Verkettbarkeit ohne Verschachtelung, indem sie die Rückgabe von Versprechen aus Rückruffunktionen und deren anschließende Übernahme ermöglichen.
Alternative Ansätze:
Zugriff auf den Antwortstatus nach dem Warten auf den JSON body können Sie verschiedene Ansätze verfolgen:
Zwischenergebnisse mit verschachteltem .then() zurückgeben Ketten:
fetch(url) .then(response => response.json()) .then(data => ({ data: data, status: response.status })) .then(res => { console.log(res.status, res.data.title); });
Asynchrone Funktionen nutzen und warten:
const response = await fetch(url); const data = await response.json(); console.log(response.status, data.title);
Achtung:
Es ist immer ratsam, den Antwortstatus zu überprüfen, bevor Sie auf den Antwortinhalt zugreifen, da dieser möglicherweise nicht immer JSON enthält Daten.
Das obige ist der detaillierte Inhalt vonWarum gibt „response.json()' beim Abrufen ein Versprechen zurück und wie kann ich auf das Ergebnis zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!