等待函数完成for循环

时间:2013-08-07 23:16:04

标签: javascript

我正在使用deCarta地图设计一个网站。我需要为一定数量的点添加一些叠加。我的代码如下所示,

for(var i = 0; i<NumberofPoints; i++){
    var lat1, lon1, lat2, lon2, lat3, lon3;

    //some calculations  for coordinates go here

    //create a line object
    var polyline = new deCarta.Core.Polyline({
    lineGeometry: [
        new deCarta.Core.Position(lat2, lon2),
        new deCarta.Core.Position(lat1, lon1),
        new deCarta.Core.Position(lat3, lon3)
    ],
    strokeColor: '#000088',
    strokeWidth: 2
    });

    //add to map
    shapeOverlay.addObject(polyline);   

}

如果我在循环中的某处添加手动延迟(使用alert('plotting point number'+i);),我会获得地图上的所有点。否则,我什么都没得到!我猜测创建线对象的调用并没有在遍历循环之前将其添加到地图中。

所以我的问题是,如何确保在转到循环中的下一个点之前完成创建线对象并添加到地图的调用?

如果问题措辞不当,我们很抱歉。这是我第一次在这里发帖(或者我第一次使用JavaScript!)任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

function makePoints() {
      var lat1, lon1, lat2, lon2, lat3, lon3;

      //some calculations  for coordinates go here

      //create a line object
      var polyline = new deCarta.Core.Polyline({
      lineGeometry: [
          new deCarta.Core.Position(lat2, lon2),
          new deCarta.Core.Position(lat1, lon1),
          new deCarta.Core.Position(lat3, lon3)
      ],
      strokeColor: '#000088',
      strokeWidth: 2
      });

      //add to map
      shapeOverlay.addObject(polyline); 
}

for (var i = 0; i < NumberofPoints; i++) {
    // Try to increase this number if lines can't keep up.
    setTimeout(makePoints, 500 * i);
}

答案 1 :(得分:-1)

如果你要触发的函数返回一个值,那么用它来打破一个while循环。