Page 1 sur 1

Ma fonction ne se termine pas

Posté : 19 oct. 2020, 12:04
par leo
Bonjour,

Je fais une application web PWA, j'ai du côté serveur du PHP (100% fonctionnel) et du côté "client" du javascript HTML ...

Je "get" des logs sur ma base de donnée, la partie serveur mes les envoies correctement par http :

Code : Tout sélectionner

<Logs><log><FK_user>1</FK_user><jobnumber>150983</jobnumber><notes>nothing</notes><latitude>51.4311872</latitude><longitude>-2.6180297</longitude><time>2020-10-16 9:32:56</time></log> ... </Logs>
Je veux les afficher en remplacant par le FK_User par le nom de l'utilisateur, je refais donc une requête sur mon serveur PHP, qui me rend correctement le nom de l'utilisateur :

Code : Tout sélectionner

<Users><user><nom>test</nom></user></Users>
Maintenant le problème est que je n'arrive pas traité les logs avec le FK passé en nom :

Code : Tout sélectionner

function getLogSuccess(data, text, jqXHR) {
    $(data).find("log").each(function () {

        
        actionGetNomUser($(this).find("FK_user").text(), "getNomUser", getUserSuccess, getUserError);
        sleep(1000);

        if(sessionStorage.getItem("nomUserLog") != null){
            var sel = document.getElementById('log');
            var opt = document.createElement('option');
            console.log(sessionStorage.getItem("nomUserLog"));
            opt.appendChild(document.createTextNode("" + $(this).find("time").text() + " : " +  sessionStorage.getItem("nomUserLog") + " - " + $(this).find("jobnumber").text() + " - " + $(this).find("notes").text()));
            opt.value = 'option value';
            sel.appendChild(opt);
        }else{
            
        }
    });
}


function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}


function getUserSuccess(data, text, jqXHR) {
    var nom = $(data).find("nom").text();
    sessionStorage["nomUserLog"] = nom;
    console.log( sessionStorage.getItem("nomUserLog"));
}
J'ai remarqué grâce à mes console.log que la méthode getUserSuccess ce termine après la méthode getLogSuccess.
Ma question est donc comment puis-je terminé getUserSuccess en premier. J'ai déjà essayé avec ma méthode sleep.

Merci pour votre temps !

Re: Ma fonction ne se termine pas

Posté : 21 oct. 2020, 10:28
par webmaster
Bonjour,

Je pense que la difficulté vient du fonctionnement asynchrone des appels AJAX.
Les fonctions ne se terminent pas dans l'ordre des appels. C'est d'ailleurs un gros avantage.

Dans ce cas, j'ajouterai plutot l'attribut async: false dans l'appel ajax
Voir la doc :
https://api.jquery.com/jquery.ajax/#jQuery-ajax1