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 ?

Pourquoi `response.json()` renvoie-t-il une promesse lors de la récupération et comment puis-je accéder au résultat ?

DDD
Libérer: 2024-12-15 17:24:13
original
927 Les gens l'ont consulté

Why Does `response.json()` Return a Promise in Fetch, and How Can I Access the Result?

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 :

  • Pourquoi réponse.json renvoyer une promesse ?

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.

  • Pourquoi le retour de la promesse de .then() fournit-il la valeur ?

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);
    });
    Copier après la connexion
  • Utiliser les fonctions asynchrones et attendre :

    const response = await fetch(url);
    const data = await response.json();
    console.log(response.status, data.title);
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal