功能计时:如何首先更改此变量?

时间:2019-05-30 16:13:32

标签: javascript api variables scope

我有两点,我想将它们联系起来。但是,我的最后一点是在连接之后最后定义的。我正在尝试在连接过程开始之前立即设置最​​终点。

我尝试使用var和let初始化变量。我尝试在定义终点的函数中调用连接函数。我不明白为什么代码的某些部分会先被调用。

我设置了一些警报以尝试查看正在发生的情况。由于某种原因,警报的顺序是2、3,然后是1? 3是连接过程,我希望它在定义部分1之后触发。

let finalPoint;

function getParameterByName(name, urlStr) {
  if (!urlStr) urlStr = window.location.href;
  const url = new URL(urlStr);
  return url.searchParams.get(name);
}

var sn = getParameterByName('destination');

var geocodingParams = {
  searchText: sn
};

function onResult(result) {
  var locations = result.Response.View[0].Result,
    position,
    marker;
  position = {
    lat: locations[0].Location.DisplayPosition.Latitude,
    lng: locations[0].Location.DisplayPosition.Longitude
  };
  finalPoint = position;
  marker = new H.map.Marker(position);
  map.addObject(marker);
  alert(1);
  alert(finalPoint);
};

var geocoder = platform.getGeocodingService();

geocoder.geocode(geocodingParams, onResult, function(e) {
  alert(e);
});

alert(2);
alert(finalPoint);


///////////////////////////////////////////////////////////////////////////


function calculateRouteFromAtoB (platform) {
  var router = platform.getRoutingService(),
    routeRequestParams = {
      mode: 'fastest;car',
      representation: 'display',
      routeattributes : 'waypoints,summary,shape,legs',
      maneuverattributes: 'direction,action',
      waypoint0: '52.5160,13.3779', // Brandenburg Gate
      waypoint1: '52.5206,13.3862'  // Friedrichstraße Railway Station
    };

  alert(initialPoint.lat);
  alert(initialPoint.lng);
  alert(3);
  alert(finalPoint);
  router.calculateRoute(
    routeRequestParams,
    onSuccess,
    onError
  );
}

在第2号和第3号警报中,它表示未定义finalPoint。警报2在错误的时间正确触发。

我希望先发出警报2,然后发出3,并且我希望始终定义finalPoint。

2 个答案:

答案 0 :(得分:0)

您无法在主线程中等待异步函数的执行。 Javascript本质上是单线程的,可与回调一起使用。在onResult内调用calculateRoute函数。

答案 1 :(得分:0)

我不知道方法“地址解析”中的内容是什么。但是,您可以在回调函数中调用方法。

请尝试以下操作:

<h4>Conference Registration</h4>
  <p><strong>
    <?=$confName.$confDate ?>
  </strong></p>

或者,在promise支持下,您可以执行以下操作

var geocoder = platform.getGeocodingService();

geocoder.geocode(geocodingParams, onResult, function(e) {
  alert(e);
  onResult(e);
  alert(2);
  alert(finalPoint);
});