2

我正在编写这段代码以在一段时间间隔后调用一个函数,但该函数没有执行它的功能。当我通常调用函数 pus() 它正在运行但使用 setInterval 它不起作用。请给我它的解决方案。

 var ltnlg = null;
 var flightPlanCoordinates = [];
 var nl2 = 10.9646;
 var ng2 = 72.8787;
 var lt2, ln2;
 var ltnlg = null;

 function lin() {
           flightPlanCoordinates = [
     new google.maps.LatLng(29.0167, 77.3833),
     new google.maps.LatLng(21.7679, 78.8718),
     new google.maps.LatLng(18.9647, 72.8258)
     ];

          var flightPath = new google.maps.Polyline({
               path: flightPlanCoordinates,
               strokeColor: "#FF0000",
               strokeOpacity: 1.0,
               strokeWeight: 2
               });

           flightPath.setMap(map);
           pl = new google.maps.Polyline();
           //  window.setInterval("pus()", 10000);
          pus();

           }
       }

       function pus() {



           ltnlg = new google.maps.LatLng(nl2, ng2);
           flightPlanCoordinates.push(ltnlg);
           lt2 = nl2;
            n12 = lt2 + 0.0660;
          ln2 = ng2;
          ng2 = ln2 + 0.0660;

       }   
4

2 回答 2

2

永远不要将回调作为字符串传递。

window.setInterval(pus, 10000);

或者如果你想传递一些参数

window.setInterval(function() {
    pus(a, b, c);
}, 10000);
于 2013-01-09T11:11:29.757 回答
1

这里的问题不应该是“为什么这对 setInterval 不起作用”,而应该是“为什么它在函数内部起作用”,因为它不应该。

我猜多边形的绘制是一个异步过程,当你pus()从函数内部调用时它还没有完成,这就是为什么所做的更改flightPlanCoordinates仍然会有效果。

但是将修改后的路径应用于折线的正确方法是调用pus()

flightPath.setPath(flightPlanCoordinates);

(注意:您必须使flightPath全局能够从外部访问它lin()

于 2013-01-09T11:39:05.010 回答