等待异步任务完成后再继续?
Posted
技术标签:
【中文标题】等待异步任务完成后再继续?【英文标题】:Wait for asynchronous task to complete before continuing? 【发布时间】:2014-03-22 03:38:04 【问题描述】:我正在尝试通过 google maps javascript api 获取位置坐标,这是异步发生的。
这是我的检索函数:
function getCoords(input_address)
var geocoder = new google.maps.Geocoder();
var addr =
address: input_address
;
var callback = function(result, status)
if (status == "OK")
var coords = result[0]['geometry']['location'];
console.log(coords.toUrlValue());
;
geocoder.geocode(addr,callback);
我想通过 ajax 函数将坐标与表单的其余部分一起提交。
但是,测试以下内容:
form.submit(function(event)
event.preventDefault();
var addr = $("input[type='text']").val();
getCoords(addr);
console.log('should wait');
);
输出:
should wait
coordinates
有没有办法确保getCoords
函数在下一条指令执行之前完成?
【问题讨论】:
使用回调或承诺。 这是一个常见问题解答。当您输入标题时,Stack Overflow 向您显示了一堆可能的相同问题。第三个有答案。 ***.com/questions/2768293/…。另见***.com/questions/14011619/… @Phrogz 请原谅我的无知,但这不是专门针对 ajax 调用的答案吗? 【参考方案1】:为此使用回调函数,在执行geocoder.geocode();
之类的东西后做你的其他工作
function getCoords(input_address)
......
......
geocoder.geocode(addr, function ()
doYourJobNow(); //as suggested by tgun926
);
function doYourJobNow()
console.log('should wait');
//result would be
//coordinates
//should wait
【讨论】:
geocoder.geocode()
是异步任务,所以 doYourJobNow() 必须在 geocode()
的回调函数中运行。如果您对其进行编辑,我会将此答案标记为正确。
请看更新的答案,如果我错了,请纠正我。以上是关于等待异步任务完成后再继续?的主要内容,如果未能解决你的问题,请参考以下文章