等待javascript线程

时间:2013-09-20 11:19:16

标签: javascript multithreading google-maps-api-3

有没有人知道如何在javascript中等待线程?

var resultList = new Array();

function query(){
    //more stuff
    service.nearbySearch(request, callback); //<-- this is the thread 

    console.log(resultList);        //<-- still empty array

    setTimeout(function() {
        console.log(resultList);    //<-- array filled (after hardcoded timeout)
    }, 1000);

}

function callback(results, status) {
    //...   
    resultList.push(resultObject);
}

对程序的逻辑做,在回调函数内部不能使用resultList进行处理。它需要在“父”(查询功能)中。所以在那里我需要等待线程(因此要填充数组)因为我可以继续并且结果。

所以我的问题。在java中是否有任何.join()方法?或像在Unix中的waitpid()?或等待完成任务的最佳做法是什么?

问候

1 个答案:

答案 0 :(得分:0)

Javascript全部在同一个线程中执行。它是一个阻塞线程,它将阻止浏览器更新DOM,直到它返回浏览器。

这就是为什么Javascript文件应该包含在HTML页面的底部。

上面的问题是service.nearbySearch正在向服务器执行AJAX或REST请求,并且响应是异步的(稍后会发生)。

您需要移动逻辑来处理对回调的响应。

var resultList = new Array();

function query(){
    service.nearbySearch(request, function(results, status) {
        callback(results, status);
        console.log(resultList);
    });
}

function callback(results, status) {
    //...   
    resultList.push(resultObject);
}