/ / Javascript renvoie la valeur d'un rappel multiple - javascript

Valeur de retour Javascript à partir de plusieurs rappels - javascript

Je veux attendre la fin de toutes les fonctions de rappel, puis retourner un résultat final, comme ceci:

                    var jsonArray = new Array();

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

return jsonArray;

jQueryFunction est une fonction qui contient leajax et rappel asynchrones, renvoient une valeur qui est appelée json. Je veux attendre la fin de la boucle for, puis mettre toutes les valeurs de retour dans jsonArray, le renvoyer finalement.

Mon objectif est que l'attente de tous jQueryFunctionles rappels se terminent et stockent leur retour dans jsonArray, puis retournent jsonArray à la fin. Mon objectif précédent ne fonctionne pas car il renvoie immédiatement le jsonArray et n'attend pas la boucle for

J'ai essayé comme ça:

                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);

La première alerte me montre le bon objet, mais la seconde me montre toujours null. Pourquoi? Comment le réparer?

Réponses:

2 pour la réponse № 1

Vous pouvez utiliser jquery "s when d'attendre plusieurs demandes. Vous avez juste besoin du jQueryFunction retourner le 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

});