promesse id
by ben74
HTML
<div id="console-log"></div>
JavaScript
console={log:function(x){$("#console-log").append(x+'<br>');}}
alert=function(x){$("#console-log").append(x+'<br>');}
//Génération d'une liste d'identifiant de taille aléatoire
var listOfIds = [];
var nbOfId = 1 + Math.random() * 5;
for(var i =1; i < nbOfId; ++i) {
listOfIds.push(i);
}
alert('Les ids à récupérer sont ['+listOfIds+']');
//Fonction retournant une promesse de nom correspondant à l'identifiant passé en paramètre
function getNameById(id) {
return $.post('/echo/json/',{
delay:id,
json:JSON.stringify('name'+id)
});
}
//On transforme la liste d'identifiant en liste de promesse de nom correspondant à ces id
var listOfPromises = listOfIds.map(getNameById);
// La fonction when ne prends pas de tableau en entrée, mais un varargs.
// Il est donc nécessaire de passer par la fonction apply pour invoquer when,
// afin de transformer le tableau de promesse en varargs
$.when.apply($, listOfPromises).then(function() {
var listOfName = [];
for(var i = 0; i < listOfPromises.length; ++i) {
//Arguments est une variable magique contenant les paramètres de la fonction
//Les paramètres sont passés dans le même ordre que les promesses.
listOfName.push(arguments[i][0]);
}
alert('La liste des noms est : ['+listOfName+']');
});