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
DDDoriginal
2024-12-15 17:24:13928parcourir

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);
    });
  • 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!

Déclaration:
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