等待异步任务完成后再继续?

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() 的回调函数中运行。如果您对其进行编辑,我会将此答案标记为正确。 请看更新的答案,如果我错了,请纠正我。

以上是关于等待异步任务完成后再继续?的主要内容,如果未能解决你的问题,请参考以下文章

高性能异步爬虫概述

js 异步编程

执行网络调用并继续 - 异步任务

轮询异步任务,然后等待 1 次成功或所有响应被拒绝

快点上车,前端异步编程发车了

同步 异步 阻塞 非阻塞