函数返回一个只能异步获取的值列表

Function return a list of values that could only be get asynchronously

本文关键字:异步 获取 列表 一个 返回 函数      更新时间:2023-09-26

我想写这个函数:

function getResults(nums){
    var results = [];
    for(var i = 0, len = nums.length; i < len; i++){
        var num = nums[i];
        ajaxGet("http://xxx.com/" + num, function(data){
            results.push(data);
        });
    }
    return results;
}    
var results = getResults([12, 22, 34]);

正如您所看到的,因为ajaxGet是异步的,所以这不起作用。我怎么能做到这一点呢?

您还可以告诉Ajax同步运行

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});

您需要使用回调返回数组,并在收到最后一个响应时调用回调。(注意,不会按顺序收到回复)

function getResults(nums, callback) {
    var results = [];
    for(var i = 0, len = nums.length; i < len; i++){
        var num = nums[i];
        ajaxGet("http://xxx.com/" + num, function(data){
            results.push(data);
            if (results.length === nums.length)
                callback(results);
        });
    }
}    

如果使用jQuery,可以将异步标志设置为false:

function getResults(nums){
    var results = [];
    for(var i = 0, len = nums.length; i < len; i++){
        var num = nums[i];
        jQuery.ajax({
            url: "http://xxx.com/" + num}, 
            async: flase,
            success: function(data){
                results.push(data);
            }
        });
    }
    return results;
}    
var results = getResults([12, 22, 34]);

但如果你这样做,那么你的方法就是错误的。改为使用SLaks答案。

jQuery.ajax() API页面

var allresults;
function getResults(nums){
    var results = [];
    for(var i = 0, len = nums.length; i < len; i++){
        var num = nums[i];
        ajaxGet("http://xxx.com/" + num, function(data){
            results.push(data);
            if(results.length == nums.length){
                 resume(results);
            }
        });
    }
}
getResults([12, 22, 34]);
function resume(results){
   allresults =  results;
   ....
   ....
}     

正如其他人所说,如果您不使用jQuery ,请使用