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())
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 } })
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 :
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!