javascript中的数组不返回值

javascript中的数组不返回值,javascript,arrays,node.js,function,closures,Javascript,Arrays,Node.js,Function,Closures,在上面的代码中,如果记录。函数(数据)中的results.length得到的结果为1,但当我记录performrequest之外的值时,我得到的值为0,我希望将整个数组结果的值返回给另一个函数 请注意,perform request是一种从rest api调用json数据的方法,位置的长度为4AJAX中的“异步”部分意味着,在您的情况下,传递给performRequest的结果处理函数的执行不会阻塞程序流的其余部分。它计划在HTTP响应从服务器返回请求后执行 这也是为什么您无法知道何时会执行co

在上面的代码中,如果记录。函数(数据)中的results.length得到的结果为1,但当我记录performrequest之外的值时,我得到的值为0,我希望将整个数组结果的值返回给另一个函数 请注意,perform request是一种从rest api调用json数据的方法,位置的长度为4

AJAX中的“异步”部分意味着,在您的情况下,传递给performRequest的结果处理函数的执行不会阻塞程序流的其余部分。它计划在HTTP响应从服务器返回请求后执行

这也是为什么您无法知道何时会执行console.log(results.length)。大多数情况下,它很可能在结果处理程序函数之前执行:结果处理程序函数依赖于要完成的HTTP请求,并且异步执行,而console.log(results.length);没有

当您希望在集合中循环并为每个项同步执行AJAX请求时,可以从结果处理程序调用下一项的执行。一个简单的基于JQuery的示例可以是:

for (var i in locations) {
    performRequest(options, function (data) {
        console.log("Got response: " + i + " " + options.host);
        results.push(data.current_observation);
        // return results;
    });
    console.log(results.length)
}

这个示例有一些缺陷,例如,当您使用大量的值和较短的响应时间时,它会人为地减慢一切

你注意到你的
console.log(results.length)
最先出现了吗?我从来都不明白为什么异步请求/操作/函数是异步的。
var values = [1, 2, 3, 4, 5];
var count = 0;
var i = -1;
function next() {
    if(i>=values.length) return;
    i++;

    $.get("http://www.example.com/result/" + i, function(data) {
            // do something with your data.
            // notice that at this point you can be sure your asynchronous request
            // was completed and the data definitely is available (or definitely 
            // is unavailable). So you could for example start counting stuff here:
            count++;

            // now that you definitely know that the request is done (successfully or
            // not), you can go ahead with the next one.
            next();
    });
}