Maison > interface Web > js tutoriel > Comment récupérer les valeurs des fonctions de rappel asynchrones en JavaScript ?

Comment récupérer les valeurs des fonctions de rappel asynchrones en JavaScript ?

Barbara Streisand
Libérer: 2024-12-26 10:48:11
original
437 Les gens l'ont consulté

How to Retrieve Values from Asynchronous Callback Functions in JavaScript?

Impossible de récupérer la valeur de la fonction de rappel asynchrone

Ce problème couramment rencontré comporte de nombreux fils de discussion sur Stack Overflow. Malgré des recherches approfondies, certains développeurs rencontrent toujours des difficultés pour accéder aux valeurs des rappels.

Le principal défi réside dans le fait que les méthodes synchrones ne peuvent pas renvoyer les valeurs des appels asynchrones. Comme illustré dans l'exemple fourni :

function foo(address){

  // google map stuff
  geocoder.geocode( { 'address': address}, function(results, status) {
      results[0].geometry.location; // I want to return this value
  })

}
foo(); //result should be results[0].geometry.location; value
Copier après la connexion

Tenter de renvoyer directement la valeur souhaitée génère une réponse "indéfinie". Par la suite, des modifications ont été proposées mais en vain.

Un exemple d'une telle tentative :

function foo(address){
  var returnvalue;    
  geocoder.geocode( { 'address': address}, function(results, status) {
      returnvalue = results[0].geometry.location; 
  })
  return returnvalue; 
}
foo(); //still undefined
Copier après la connexion

Résolution

La solution implique de passer un rappel à la fonction foo, qui recevra par la suite la valeur de retour :

function foo(address, fn){
  geocoder.geocode( { 'address': address}, function(results, status) {
     fn(results[0].geometry.location); 
  });
}

foo("address", function(location){
  alert(location); // this is where you get the return value
});
Copier après la connexion

Asynchrone Fonctions et structures de rappel :

Les appels de fonctions internes asynchrones nécessitent l'utilisation de fonctions d'emballage également asynchrones afin de récupérer les réponses.

Bibliothèques et approches alternatives :

La gestion de nombreux rappels peut être simplifiée grâce à l'utilisation de bibliothèques de promesses comme Q. Ces frameworks fournissent un moyen pratique de gérer opérations asynchrones et accéder à leurs résultats de manière plus efficace et structurée.

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
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