Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取google api地址值作为javascript函数的返回值 我正在尝试从google maps api获取地址,并在函数中返回此地址。我需要更改什么才能显示这些地址_Javascript_Jquery_Google Maps_Google Maps Api 3_Google Api - Fatal编程技术网

获取google api地址值作为javascript函数的返回值 我正在尝试从google maps api获取地址,并在函数中返回此地址。我需要更改什么才能显示这些地址

获取google api地址值作为javascript函数的返回值 我正在尝试从google maps api获取地址,并在函数中返回此地址。我需要更改什么才能显示这些地址,javascript,jquery,google-maps,google-maps-api-3,google-api,Javascript,Jquery,Google Maps,Google Maps Api 3,Google Api,请马上看 这是不可能的,因为函数在值存在之前返回 geocode调用是异步的,因此必须异步处理结果。您已经在回调函数中成功地显示了该值,这是处理结果的方法 您可以从getAddressFromlatlng函数返回一个承诺,但这并不能真正改变任何事情。这只是将回调函数包装到一个对象中,以便您可以独立于调用对结果进行异步处理。您应该从回调结果中获取地址。解析坐标后,调用一个函数继续处理返回值,因为只有这样才能得到返回值。在处理数组的情况下,使用数组索引并在获得所需数据后更新地址字段。或者单独处理它们

  • 请马上看

    • 这是不可能的,因为函数在值存在之前返回

      geocode
      调用是异步的,因此必须异步处理结果。您已经在回调函数中成功地显示了该值,这是处理结果的方法


      您可以从
      getAddressFromlatlng
      函数返回一个承诺,但这并不能真正改变任何事情。这只是将回调函数包装到一个对象中,以便您可以独立于调用对结果进行异步处理。

      您应该从回调结果中获取地址。解析坐标后,调用一个函数继续处理返回值,因为只有这样才能得到返回值。在处理数组的情况下,使用数组索引并在获得所需数据后更新地址字段。或者单独处理它们。通过数组为每个项目向google发出请求。一旦谷歌回复回来,就转到数组中的下一项。如果您可以保存索引,以便在响应到达时知道它,那么就可以等待多个请求

      var currentIndex = null;
      function notifyAddressResolved (address) {
          yourArray[currentIndex].address = address;
          resolveNextAddress();
      }
      function getAddressFromlatlng(callback, lat, lng){
          var geocoder = new google.maps.Geocoder();
          var latlng = new google.maps.LatLng(lat, lng);  
          geocoder.geocode({'latLng': latlng}, function (results, status) {           
              callback(results[0].formatted_address);
          });
      }
      function resolveNextAddress () {
          if (currentIndex == null) {
              currentIndex = 0;
          } else {
              currentIndex++;
          }
          getAddressFromlatlng(notifyAddressResolved, yourArray[currentIndex].lat, yourArray[currentIndex].lng);
      }
      

      谢谢@Guffa,请查看此代码以获得解决方案[]()或[]()@acecloudsmaps:解决方案不是尝试从函数返回值。问题是循环变量不能用于将数据放入数组中,因为数据在循环完成后到达。的可能重复
      var currentIndex = null;
      function notifyAddressResolved (address) {
          yourArray[currentIndex].address = address;
          resolveNextAddress();
      }
      function getAddressFromlatlng(callback, lat, lng){
          var geocoder = new google.maps.Geocoder();
          var latlng = new google.maps.LatLng(lat, lng);  
          geocoder.geocode({'latLng': latlng}, function (results, status) {           
              callback(results[0].formatted_address);
          });
      }
      function resolveNextAddress () {
          if (currentIndex == null) {
              currentIndex = 0;
          } else {
              currentIndex++;
          }
          getAddressFromlatlng(notifyAddressResolved, yourArray[currentIndex].lat, yourArray[currentIndex].lng);
      }