Maison > interface Web > js tutoriel > Pourquoi fetch().then().json() renvoie-t-il parfois une promesse et parfois non ?

Pourquoi fetch().then().json() renvoie-t-il parfois une promesse et parfois non ?

Patricia Arquette
Libérer: 2024-12-29 01:00:11
original
933 Les gens l'ont consulté

Why Does fetch().then().json() Sometimes Return a Promise and Sometimes Not?

Comprendre la gestion des promesses dans Fetch()

Lorsque vous travaillez avec l'API fetch() de JavaScript, un comportement inattendu peut survenir lors de l'utilisation du .json () méthode. Cet article explique pourquoi .json() renvoie une promesse dans certains scénarios et pas dans d'autres.

Pourquoi le comportement de la promesse diffère

La méthode .json() déclenche une Promettez à l'objet de récupérer le corps de la réponse et de l'analyser au format JSON. En effet, le corps d'une réponse HTTP n'est pas disponible immédiatement. Par conséquent, la méthode .json() renvoie une Promise qui se résout lorsque le corps devient disponible.

Cependant, si l'objet Promise est renvoyé directement par le gestionnaire .then(), comme dans :

fetch(url)
  .then(response => response.json())
Copier après la connexion

la valeur renvoyée ne sera pas une promesse. Les promesses ne sont pas enveloppées indéfiniment dans les gestionnaires .then(). Au lieu de cela, la valeur sous-jacente est renvoyée, permettant à la chaîne d'opérations asynchrones de continuer.

Accès à la valeur via la promesse renvoyée

En revanche, si l'objet Promise est intégré dans un objet renvoyé, tel que :

fetch(url)
  .then(response => {
    return {
      data: response.json(),
      status: response.status
    }
  })
Copier après la connexion

la valeur renvoyée par le gestionnaire .then() restera une promesse. En effet, un nouvel objet JavaScript est créé et la méthode .json() est appelée dans sa portée. La promesse résultante est affectée à la propriété data de l'objet renvoyé.

Approches alternatives

Pour accéder à l'état de la réponse et aux données JSON dans un seul gestionnaire .then(), les approches suivantes peuvent être utilisées :

  1. Renvoyer directement l'objet Promise et le gérer dans un .then() ultérieur handler.
  2. Utilisez la méthode .then() sur la promesse renvoyée par .json() pour extraire les données et l'état avant de renvoyer un nouvel objet.
  3. Utilisez async/await au lieu de Promises, ce qui simplifie la gestion asynchrone.

Conclusion

Comprendre la promesse le comportement de la méthode .json() et la manière dont elle interagit avec les gestionnaires .then() sont cruciaux pour une programmation asynchrone efficace avec l'API fetch(). En tirant parti de la flexibilité offerte par Promises, les développeurs peuvent garantir une gestion efficace des réponses HTTP et éviter l'imbrication inutile d'opérations asynchrones.

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 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal