2015-04-05 61 views
-1

當我使用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!! 
+0

你確定你的'DirectionService.route'正在同步執行(在你的最後一行'console.log(x)'之前)嗎?我在上面的代碼中沒有看到實際運行'DirectionService.route'函數的任何內容。 – brianvaughn 2015-04-05 23:00:51

+1

回調函數在console.log()調用底部之後運行。 DirectionService.route()執行異步操作,因此不能保證何時調用回調函數。無論DirectionService.route()是否已完成運行,代碼執行都將繼續。 – brianjob 2015-04-05 23:04:33

+0

可能的重複[爲什麼我的變量在函數內部修改後沒有改變? - 異步代碼引用](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

回答

0

的console.log(x)的(末尾)觸發。記住併發。

+1

JavaScript is single因此它不是一個併發問題,而是一個執行順序問題。 – brianjob 2015-04-05 23:06:54

+0

謝謝..我現在明白了.. – 2015-04-05 23:18:29

+0

但是,有沒有辦法解決它?像等到這個方向服務回調被稱爲? – 2015-04-05 23:19:52