我有两点,我想将它们联系起来。但是,我的最后一点是在连接之后最后定义的。我正在尝试在连接过程开始之前立即设置最终点。
我尝试使用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。
答案 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);
});