Javascript 如何让函数在前一个函数执行后运行

Javascript 如何让函数在前一个函数执行后运行,javascript,jquery,html,google-maps,Javascript,Jquery,Html,Google Maps,所以我一直在开发一个网站,它从谷歌的表格单元格中获取一些信息,并用这些信息给谷歌地图的覆盖层上色。我遇到的问题是,地图覆盖似乎在检索单元格信息之前运行。我不知道如何让地图覆盖等待,直到它有它需要的信息 最终,我将不得不获取多个单元格值,因此我不希望每次运行getCell()时都调用我的映射,因此我不会将myMap()放在$.getJSON的done()中 引导示例 /**这是谷歌表单的ID**/ //这是带有事件图表的google工作表的google工作表ID。 var theSheetID

所以我一直在开发一个网站,它从谷歌的表格单元格中获取一些信息,并用这些信息给谷歌地图的覆盖层上色。我遇到的问题是,地图覆盖似乎在检索单元格信息之前运行。我不知道如何让地图覆盖等待,直到它有它需要的信息

最终,我将不得不获取多个单元格值,因此我不希望每次运行getCell()时都调用我的映射,因此我不会将myMap()放在$.getJSON的done()中


引导示例
/**这是谷歌表单的ID**/
//这是带有事件图表的google工作表的google工作表ID。
var theSheetID=“1EAP6DUGIHIHRSGNC8MX-FDZRIBDP5R0VN8YQ0SHKNA”;
var typeOfEvent=“事件”;
var eventManager=“Jeb”;
var managerCell=“123-456-789”;
//这是google sheet的google sheet ID,其中包含事件的批次值。
var theMapSheetID=“1ouw8evxlsmarw1qtqmxvjua1qrgogo5g545jb4oz-4”;
var workSheetID=“默认”;
//为要访问的每个单元格复制这些值
var theRow=“1”;
var theColumn=“1”;
//为每个批次复制此变量
//i、 e.地段
var theLot;
变种theLot1;
//theLot=20;
$(文档).ready(函数(){
getCell=函数(){
var-api='1〕https://spreadsheets.google.com/feeds/cells/';
var电子表格=theMapSheetID;
var工作表=工作表TID;
var row=THROW;
var col=色谱柱;
var-row1=2;
var-col2=2;
var url=api+电子表格+'/'+工作表+'/public/basic/R'+行+'C'+col+'?alt=json';
$.getJSON(url)
.完成(功能(数据){
console.log(数据)
if(数据输入){
theLot=parseInt(data.entry.content['$t']);
//返回$.Deferred();
//myMap();
}else{}
})
.fail(函数(){});
}
//$.when(getCell()).then(myMap());
//myMap();
});
函数myMap(){
//theLot=15;
var p1=新的google.maps.LatLng(41.051651,-75.515626);
var p2=新的google.maps.LatLng(41.048082,-75.521755);
var p3=新的google.maps.LatLng(41.048006,-75.522286);
var p4=新的google.maps.LatLng(41.051565,-75.5288822);
var p5=新的google.maps.LatLng(41.056059,-75.523349);
var p6=新的google.maps.LatLng(41.053316,-75.520697);
var mapCanvas=document.getElementById(“map”);
变量映射选项={
中心:p2,
缩放:15
};
var map=new google.maps.map(mapCanvas,mapOptions);
//var map=new google.maps.map(document.getElementById(“googleMap”)、mapOptions);
变色变种;
//警报(theLot);
var myCenter=newgoogle.maps.LatLng(41.051629,-75.522953);
var marker=new google.maps.marker({
位置:迈森特
});
marker.setMap(map);
var infowindow=new google.maps.infowindow({
内容:theLot.toString()
});
信息窗口。打开(地图、标记);
如果(t小于25){
颜色为“#ff0000”;
}否则如果(洛氏>25&&洛氏<50){
颜色=“#fff200”;
}否则如果(洛氏>50&&洛氏<75){
颜色为“#aaff00”;
}否则{
颜色为“#00ff00”;
}
var lotOverlay=new google.maps.Polygon({
路径:[p1、p2、p3、p4、p5、p6],
strokeColor:#000000“,
笔划不透明度:0.0,
冲程重量:2,
填充颜色:颜色,
填充不透明度:0.5
});
lotOverlay.setMap(map);
}



2017毕业典礼 有关更多详细信息,请联系我们: 文件。写(“+typeOfEvent+”管理者“+eventManager+”
); 文件。填写(“ ”);

JavaScript语句逐行执行。但是,使用effects,即使效果尚未完成,也可以运行下一行代码。这可能会产生错误

为了防止这种情况,您可以创建一个回调函数。总之,您可以将函数作为参数传递,它将在最后执行

$("button").click(function(){
    $("p").hide("slow", function(){
        alert("The paragraph is now hidden");
    });
});

如果你这样叫它,那么你可以在隐藏完成之前得到一个警报

 $("button").click(function(){
        $("p").hide("slow");
        alert("The paragraph is now hidden");
  });

这里展示一个简单的回调函数示例,而不仅仅是链接到w3schools…我在w3schools上看到了相同的代码,问题是我仍然对此感到困惑。好的,在这个示例中,当用户单击按钮时,使用“slow”参数执行隐藏函数,然后将调用另一个函数,该函数作为参数传入。通过这种方式,函数执行是链接的,因此将以保证的顺序依次调用一个函数。是否要在ajax调用成功后调用myMap()?请将myMap()放在$.getJSONYeah的done()中,我要在getCell()成功运行后调用myMap()。您可以将myMap()放在.done()中{myMap()}$getJson的。这将调用myMap()。如果(data.entry)没有调用myMap(),请检查它是否为true我不想这样做的唯一原因是因为我想多次运行getCell()以获取多个单元格的值。我不希望出现问题,因为myMap()被多次调用。