0

有谁知道如何在 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() ?或者等待完成任务的最佳做法是什么?

问候

4

1 回答 1

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);
}
于 2013-09-20T11:27:38.573 回答