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+']');

});