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

Comment puis-je renvoyer des valeurs à partir de fonctions de rappel asynchrones en JavaScript ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-27 01:15:09401parcourir

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

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!

Déclaration:
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