Ma fonction ne se termine pas

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
leo
Messages : 1
Enregistré le : 19 oct. 2020, 11:54

Ma fonction ne se termine pas

Message par leo » 19 oct. 2020, 12:04

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 !

Avatar du membre
webmaster
Administrateur du site
Messages : 396
Enregistré le : 28 févr. 2017, 15:19

Re: Ma fonction ne se termine pas

Message par webmaster » 21 oct. 2020, 10:28

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
TJS : 20 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

Répondre