Javascript 有没有办法等到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

我对谷歌定向服务有问题。我知道它是异步的,这就是我的问题所在。我希望等到DirectionsService返回结果,而不是执行没有应答的代码。以下是一个示例:

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被称为异步是有原因的。使其同步是一个坏主意。坦率地说我不知道如何在我的情况下使用这个。