我已经从此链接here编写了脚本,并且我想使函数返回距离,这是我的实际脚本:

var calcRoute = function(origin,destination) {
    var dist;
    var directionsDisplay;
    var directionsService = new google.maps.DirectionsService();
    directionsDisplay = new google.maps.DirectionsRenderer();
  var request = {
    origin:origin,
    destination:destination,
    travelMode: google.maps.DirectionsTravelMode.DRIVING
  };
  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(response);
      dist = response.routes[0].legs[0].distance.value / 1000;
    }
  });
    return dist;
};
$scope.resto = calcRoute("-7.048357, 110.418877","-7.048443, 110.441022");


我在函数中放了两个参数,我希望函数返回距离,但是

return dist;

在脚本中不从中返回值

dist = response.routes[0].legs[0].distance.value / 1000

我在我的视图中使用angularjs和resto而不显示距离,有人请我帮忙,脚本有什么问题吗?

最佳答案

在执行directionsService.route函数之前,功能calcRoute已经执行并返回了dist,这将是不确定的。

您将在directionsService.route的回调函数中获取值

您可以向calcRoute函数添加另一个参数(回调函数)。现在,一旦directionsService.route得到响应,您就可以将值传递给这个新的回调函数。

尝试这个。

var calcRoute = function(origin,destination,cb) {
    var dist;
    var directionsDisplay;
    var directionsService = new google.maps.DirectionsService();
    directionsDisplay = new google.maps.DirectionsRenderer();
  var request = {
    origin:origin,
    destination:destination,
    travelMode: google.maps.DirectionsTravelMode.DRIVING
  };
  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(response);
      cb(null, response.routes[0].legs[0].distance.value / 1000);
    }
    else {
      cb('pass error information');
    }
  });
};
calcRoute("-7.048357, 110.418877","-7.048443, 110.441022", function (err, dist) {
    if (!err) {
      $scope.resto = dist;
    }
});

10-07 14:29
查看更多