Rappels asynchrones : renvoyer des valeurs
Le retour de valeurs à partir de fonctions de rappel asynchrones peut être un défi en raison de leur nature non bloquante. Voici une description du problème et une solution :
Dans l'exemple fourni :
function foo(address) { // Google Maps stuff geocoder.geocode({'address': address}, function(results, status) { // Unable to return results[0].geometry.location synchronously }); }
Dans le rappel de géocodage asynchrone, la valeur que vous souhaitez renvoyer ne peut pas être récupérée de manière synchrone. Tenter de le faire entraînera une valeur indéfinie.
Solution : rappel avec résultat
Pour obtenir la valeur, vous pouvez passer une fonction de rappel à foo qui recevra le résultat :
function foo(address, callback) { geocoder.geocode({'address': address}, function(results, status) { callback(results[0].geometry.location); }); }
Dans le rappel pour foo, vous pouvez alors accéder à l'emplacement value :
foo("address", function(location) { alert(location); // Result obtained here });
Chaînes de fonctions asynchrones
Si un appel asynchrone est imbriqué dans une autre fonction, cette fonction doit également être asynchrone pour permettre d'obtenir la valeur de retour . Pour les scénarios complexes, envisagez d'utiliser une bibliothèque de promesses comme Q pour gérer efficacement les 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!