繁体   English   中英

来自多个回调的Javascript返回值

[英]Javascript return value from multiple callback

我想等待所有回调函数完成,然后返回最终结果,如下所示:

                    var jsonArray = new Array();

                    for(var i = 0; i < 10; i++)
                    {
                        jQueryFunction(i, function(json){
                            jsonArray[i] = json;
                        });
                    }

                    return jsonArray;

jQueryFunction是一个包含异步ajax和回调的函数,返回一个称为json的值。 我想等待for循环完成,然后将所有返回值放入jsonArray中,最后返回它。

我的目标是等待所有jQueryFunction回调完成并将其返回结果存储到jsonArray中,然后在最后返回jsonArray。 我之前的目标不起作用,因为它立即返回了jsonArray并且不等待for循环

我这样尝试过:

                function jQueryFunction(ptd_url, callback)
                { 
                    $.ajax
                            ({
                                type: "GET",
                                async: true,
                                url: ptd_url,
                                dataType: "jsonp",
                                jsonp: "callback",
                                jsonpCallback: "tpsHandler",
                                success: function(json)
                                {
                                    return callback(json);
                                }
                            });  
                }

                function finalResultFunction()
                {
                    var jsonArray = new Array();

                    for(var i = 0; i < 10; i++)
                    {
                        jQueryFunction(1, function(json){
                            jsonArray[i] = json;
                            alert(jsonArray[i]);
                        });
                    }

                    $.when.apply($, jsonArray).done(function(){
                      alert(jsonArray[0]);
                    ...
                 }

                 setInterval(finalResultFunction,1000);

第一个警报向我显示正确的对象,但是第二个警报仍向我显示null。 为什么? 如何解决?

您可以使用jquery的when来等待多个请求。 您只需要jQueryFunction返回jqXHR

function jQueryFunction(){
    return $.ajax( /* ... */ );
}

var requests = [];

for(var i = 0; i < 10; i++)
{
    var xhr = jQueryFunction( /* ... */ );

    requests.push(xhr);
}

$.when.apply($, requests).done(function(){

    // EVERYTHING IS NOW DONE, DO SOMETHING HERE

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM