Heim > Fragen und Antworten > Hauptteil
Wie in der Frage, wie man die formalen Parameterdaten im Abschluss an externe Variablen übergibt
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);
});
Die Verwendung von Zuweisungen kann nur sicherstellen, dass die Daten im Abschluss gültig sind. Die Verwendung von Neu zum Zuweisen von Speicher hat keine Auswirkung. Ich habe keine Zeit, JS zu lernen, daher bin ich schamlos ask segmentfault>3<
phpcn_u15822017-07-05 11:01:29
用ajax async:false但是问题依旧?
你把代码贴出来看看,按照常理来说应该是可以的。
其它的方法
1:可以在promise的then逻辑中处理异步值以及和异步值有关的逻辑。
2:用generator配合yield同步化书写的方式处理你的逻辑
3:直接用async函数也可以。
淡淡烟草味2017-07-05 11:01:29
你的代码赋值方式是正确的,所谓【退出后就无效】可能是这样的控制流问题:
var x = 0
setTimeout(() => {
// 这里 x 是 1
x = 1
}, 1000)
// 这里 x 还是 0
console.log(x)
你的代码中 gc.getLocation
如果和上面的示例一样,是一个异步调用,那么就不能按照代码书写顺序来保证代码执行顺序了。因此如果直接在后续的代码中访问 outer
变量,很可能拿到的就是异步调用完成前的旧值。