Javascript 有没有办法等到DirectionsService返回结果?
我对谷歌定向服务有问题。我知道它是异步的,这就是我的问题所在。我希望等到DirectionsService返回结果,而不是执行没有应答的代码。以下是一个示例:Javascript 有没有办法等到DirectionsService返回结果?,javascript,google-maps-api-3,google-directions-api,Javascript,Google Maps Api 3,Google Directions Api,我对谷歌定向服务有问题。我知道它是异步的,这就是我的问题所在。我希望等到DirectionsService返回结果,而不是执行没有应答的代码。以下是一个示例: function snap_to_road (lat) { var position; var request = { origin: lat, destination: lat, travelMode: google.maps.DirectionsTravelMode.D
function snap_to_road (lat) {
var position;
var request = {
origin: lat,
destination: lat,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
return response.routes[0].legs[0].start_location;
}
});
}
alert(snap_to_road(current.latLng));
警报始终显示:“未定义”。有什么办法可以解决这个问题吗?下面是我上面提到的一个例子:
var path = "/path/to/some/resource";
$.ajax({
url: path,
type: "get",
data: serializedData, //<-- depends on what data you are using
async: false, //will wait until resource has loaded or failed
//will be called on success
success: function(response, textStatus, jqXHR){
// log a message to the console
console.log("Successfully loaded resource!");
},
//will be called on error
error: function(jqXHR, textStatus, errorThrown){
// log the error to the console
console.log(
"The following error occured: "+
textStatus, errorThrown
);
},
// callback handler that will be called on completion
// which means, either on success or error
complete: function(){
console.log("Completed: with error or success");
}
});
var path=“/path/to/some/resource”;
$.ajax({
url:path,
键入:“获取”,
数据:serializedData,//我认为这是不可能的。您可以在snap_to_road中使用回调参数:
function snap_to_road (lat, callback) {
var position;
var request = {
origin: lat,
destination: lat,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
callback(response.routes[0].legs[0].start_location);
}
});
}
snap_to_road(current.latLng, function(result) {
alert(result);
});
在google directions返回结果后调用您的警报方法。例如:
单击按钮事件后调用snap_to_road
function snap_to_road (lat) {
var position;
var request = {
origin: lat,
destination: lat,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
ShowAlert(response.routes[0].legs[0].start_location);
}
});
}
function ShowAlert(result){
alert(result);
}
您可以使snap_to_road()返回承诺,然后在异步函数中使用wait。wait运算符用于等待承诺。它只能在常规JavaScript代码中的异步函数中使用。如下所示:
function snap_to_road (lat) {
var position;
var request = {
origin: lat,
destination: lat,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
return new Promise((resolve, reject) => {
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
resolve(response.routes[0].legs[0].start_location);
}else{
reject(0);
}
});
});
}
async function alertPromise(){
await snap_to_road(current.latLng).then((resolve) => {
alert(resolve)
})
}
您可以在reject()中放置一些消息您可以使用jQuery AJAX调用并设置async:false
,这将使您的程序等待您想要加载的任何资源。您能给我一些指向示例的链接吗?我从来没有使用过这样的东西。可能重复的.AJAX被称为异步是有原因的。使其同步是一个坏主意。坦率地说我不知道如何在我的情况下使用这个。