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