Maison > interface Web > js tutoriel > Comment puis-je récupérer des valeurs à partir de fonctions de rappel asynchrones en JavaScript ?

Comment puis-je récupérer des valeurs à partir de fonctions de rappel asynchrones en JavaScript ?

Mary-Kate Olsen
Libérer: 2024-12-30 19:13:09
original
919 Les gens l'ont consulté

How Can I Retrieve Values from Asynchronous Callback Functions in JavaScript?

Comment gérer les retours des fonctions de rappel asynchrones en JavaScript

Les fonctions de rappel asynchrones posent un défi lors de la récupération de valeurs à partir de méthodes synchrones. Considérez l'extrait de code suivant, qui tente de récupérer une valeur d'emplacement à partir d'une fonction de rappel :

function foo(address) {
  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

Cependant, essayer de renvoyer la valeur directement entraîne "indéfini". Les tentatives ultérieures utilisant des variables intermédiaires ou le passage de rappel ont également échoué.

La solution : le passage de rappel

Le retour des valeurs des fonctions de rappel asynchrones dans les méthodes synchrones est impossible. Au lieu de cela, un rappel doit être transmis à la fonction asynchrone pour recevoir 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

Dans ce code révisé, la fonction foo accepte un rappel fn pour gérer la valeur de retour. La fonction asynchrone geocoder.geocode transmet ensuite la valeur de localisation à fn comme argument. La fonction de rappel peut ensuite utiliser la valeur d'emplacement si nécessaire.

Considérations sur la programmation asynchrone

N'oubliez pas que lorsqu'un appel de fonction interne est asynchrone, toutes les fonctions englobantes doivent également être asynchrones. pour renvoyer une réponse. Si vous travaillez avec de nombreux rappels, envisagez d'utiliser une bibliothèque de promesses comme Q pour simplifier le processus.

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