當我使用DirectionService將座標放置到多段線中時... 我意識到,回調函數外部的變量多段線根本沒有改變.. 我也試過了它的變量x ..和它是一樣的.. 我只是想讓這段代碼工作.. 是否有變更外部回調改變時,它改變了回調範圍?執行回調函數之前回調中的變量不能改變
var polyline = new google.maps.Polyline({
path: [],
strokeColor: '#FF0000',
strokeWeight: 3});
var x = 0;
DirectionService.route(request, function(result, status) {
x = 1;
if (status == google.maps.DirectionsStatus.OK)
{
var legs = result.routes[0].legs;
for (i = 0; i < legs.length; i++) {
var steps = legs[i].steps;
for (j = 0; j < steps.length; j++) {
var nextSegment = steps[j].path;
for (k = 0; k < nextSegment.length; k++) {
polyline.getPath().push(nextSegment[k]);]
}
}
}
console.log(polyline.getPath().getArray().length); // not zero
console.log(x) // x = 1;
}
});
map = new google.maps.Map(document.getElementById("googleMap"),mapProp);
console.log(polyline.getPath().getArray().length); // the array length is 0
console.log(x) // x remains ZERO!!
你確定你的'DirectionService.route'正在同步執行(在你的最後一行'console.log(x)'之前)嗎?我在上面的代碼中沒有看到實際運行'DirectionService.route'函數的任何內容。 – brianvaughn 2015-04-05 23:00:51
回調函數在console.log()調用底部之後運行。 DirectionService.route()執行異步操作,因此不能保證何時調用回調函數。無論DirectionService.route()是否已完成運行,代碼執行都將繼續。 – brianjob 2015-04-05 23:04:33
可能的重複[爲什麼我的變量在函數內部修改後沒有改變? - 異步代碼引用](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – geocodezip 2015-04-05 23:26:10