Comme dans la question, comment transmettre les données des paramètres formels dans la fermeture aux variables externes
var outer;
var map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398,39.897445);
var gc = new BMap.Geocoder();
gc.getLocation(point, function(rs){
var addComp = rs.addressComponents;
//how to store this string to variable outer;
//outer = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
});
L'utilisation de l'affectation ne peut garantir que les données contenues dans la fermeture sont valides, et elles seront invalides après la sortie. L'utilisation de new pour allouer de la mémoire n'a aucun effet. Je manque de temps et je n'ai pas le temps d'apprendre JS, donc je n'ai pas honte de le faire. demander segmentfault>3<
用ajax async:false但是问题依旧?
Postez le code et jetez un œil. Selon le bon sens, ça devrait aller.Autres méthodes
1 : Les valeurs asynchrones et la logique liée aux valeurs asynchrones peuvent être traitées dans la logique de promesse d'alors.
2 : Utilisez le générateur et l'écriture de synchronisation de rendement pour traiter votre logique
3 : Vous pouvez également utiliser directement la fonction asynchrone.
Votre méthode d'attribution de code est correcte. Le soi-disant [invalide après la sortie] peut être un problème de flux de contrôle comme celui-ci :
La variable
gc.getLocation
如果和上面的示例一样,是一个异步调用,那么就不能按照代码书写顺序来保证代码执行顺序了。因此如果直接在后续的代码中访问outer
dans votre code est susceptible d'obtenir l'ancienne valeur avant la fin de l'appel asynchrone.Vous pouvez maintenant définir une variable externe à l'extérieur, comme le type d'objet, puis la transmettre en tant que paramètre en attribuant une valeur à l'objet en interne, vous pouvez transférer la valeur vers l'extérieur
.