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
Libérer: 2024-12-27 01:15:09
original
341 Les gens l'ont consulté

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
  });
}
Copier après la connexion

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); 
  });
}
Copier après la connexion

Dans le rappel pour foo, vous pouvez alors accéder à l'emplacement value :

foo("address", function(location) {
  alert(location); // Result obtained here
});
Copier après la connexion

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!

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