Javascript“回调”函数不起作用

Javascript 'callback' function not working

本文关键字:函数 不起作用 回调 Javascript      更新时间:2023-09-26

我使用 Google 地图 API v3 绘制路线。但是对于某些路径,该路线不会绘制在地图上。所以我写了一个回调函数。但它不起作用,我的代码是

function putRoute(request,color,callback)
{
  var color   = color;
  var request = request;
  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      var polylineOptionsActual = {
        strokeColor  :color,
        strokeOpacity: 1.0,
        strokeWeight : 5,
      };
      var directionsRenderer = new google.maps.DirectionsRenderer;
      directionsRenderer.setMap(map);
      directionsRenderer.setOptions( { polylineOptions: polylineOptionsActual, suppressMarkers: true} );
      directionsRenderer.setDirections(response);
    }
  });
  if (typeof callback === "function") {
    callback(request,color);
  }
}
putRoute(request,color,function() {
});

尝试将函数 putRoute 重命名为

function putRoute(request,color){}

我想这个条件是不正确的:

  if (typeof callback === "function") {

我会把它改成

  if (typeof callback != "undefined") {

至少,我知道最后一个代码正在工作。

你也可以试试这个:

if (callback instanceof Function) {
// do stuff;
}

您的回调例程位于错误的位置。 它需要位于方向服务的回调函数内:

function putRoute(request,color,callback)
{
  var color   = color;
  var request = request;
  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      var polylineOptionsActual = {
        strokeColor  :color,
        strokeOpacity: 1.0,
        strokeWeight : 5,
      };
      var directionsRenderer = new google.maps.DirectionsRenderer;
      directionsRenderer.setMap(map);
      directionsRenderer.setOptions( { polylineOptions: polylineOptionsActual, suppressMarkers: true} );
      directionsRenderer.setDirections(response);
      // only execute callback on success   
      if (typeof callback === "function") {
        callback(request,color);
      }
    } else { 
      alert("Directions request failed:" + status); 
    }
  });
}

当我将回调定义为:

function callback() {
...
}

然后我把它改成:

callback = function() {
...
}

一切都奏效了! 希望对;)有所帮助