如何使函数initMap()在执行之间等待?

时间:2015-09-01 07:48:57

标签: javascript jquery ajax google-maps google-maps-api-3

我有两个功能

function otherfun(val){
    var data = {'latitude': val[0], 'longitude': val[1]};
    $.post(URL, data, function(response){
        if(response){ 
           // I want to return response from here
        }
        else{ alert('Error! :('); }
    });
}


function initMap() {

      var pos = {};
      if (navigator.geolocation) {

      navigator.geolocation.getCurrentPosition(function(position) {
        var pos = {
          lat: position.coords.latitude,
          lng: position.coords.longitude
        };

        var output = otherfun([pos.lat,pos.lng]);

        alert(output);
        // use output's value further

}

函数initMap()最初执行。我将lat和lng的值传递给otherfun()

我想:

  1. 从函数otherfun返回响应值。
  2. 使initMap()函数等待返回otherfun()并存储在变量输出中
  3. 然后显示带有输出值的警告框。

1 个答案:

答案 0 :(得分:1)

在两个函数中拆分initMap。在otherfun之后调用原始init和回调函数。

function otherfun(val) {
    var data = {'latitude': val[0], 'longitude': val[1]};
    $.post(URL, data, function(response){
        if(response){ 
           otherfunCallback(response);    // Call a callback function
        }
        else{ alert('Error! :('); }
    });
}

function initMap() {

      var pos = {};
      if (navigator.geolocation) {

      navigator.geolocation.getCurrentPosition(function(position) {
        var pos = {
          lat: position.coords.latitude,
          lng: position.coords.longitude
        };

        otherfun([pos.lat,pos.lng]);
}

// The callback function that alert for the output
function otherfunCallback(data) {
    // ... extract the data you need
    var output = ...;
    alert(output);   
}

如果需要存储输出结果,可以将其保存在非区域设置变量中。