Maison >interface Web >js tutoriel >Pourquoi `response.json()` renvoie-t-il une promesse lors de la récupération et comment puis-je accéder au résultat ?
Aperçu des promesses et du chaînage de promesses dans la gestion des réponses de récupération
Lors de l'expérimentation de l'API fetch(), une observation intrigante a émergé concernant le comportement de .json().
Observation :
Lors du retour de réponse.json() dans un littéral d'objet passé à .then(), un objet Promise est obtenu. Cependant, lorsqu'il est renvoyé directement par le gestionnaire .then(), il renvoie la valeur réelle.
Explication :
L'appel de réponse.json récupère une autre promesse pour le corps de la réponse HTTP, qui n'est pas encore chargé. En effet, vous recevez l'objet de réponse dès que les en-têtes sont reçus, mais le corps n'est pas encore disponible.
C'est un aspect fondamental des promesses. Les promesses permettent la chaînabilité sans imbrication en permettant le retour des promesses des fonctions de rappel et leur adoption ultérieure.
Approches alternatives :
Pour accéder à l'état de la réponse après avoir attendu le JSON body, vous pouvez adopter différentes approches :
Renvoyer les résultats intermédiaires à l'aide de .then() imbriqués chaînes :
fetch(url) .then(response => response.json()) .then(data => ({ data: data, status: response.status })) .then(res => { console.log(res.status, res.data.title); });
Utiliser les fonctions asynchrones et attendre :
const response = await fetch(url); const data = await response.json(); console.log(response.status, data.title);
Attention :
Il est toujours conseillé de vérifier l'état de la réponse avant d'accéder au contenu de la réponse, car il ne contient pas toujours de données JSON.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!