IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Attendre la fin de la fonction dans une boucle


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2002
    Messages : 80
    Points : 47
    Points
    47
    Par défaut Attendre la fin de la fonction dans une boucle
    Bonjour à tous,

    Y'a un truc que je dois rater, que je pige pas...
    j'ai une boucle "for" qui appelle une fonction...
    et bien j'arrive à avoir dans la console la dernière commande alors que ma boucle n'est pas terminer il n'attend pas le retour ???

    voici le code
    donc je vois viens mon start, end et la suite mais pas dans l'ordre
    y'a t'il un moyen de forcer l'attente de fin de l'appel à la procédure..
    car à la fin du for je dois calculer un ensemble de retour qui du coup son faux car executé, avant la fin des boucles ???

    Help...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $('#SendCalculGlobal').click(function () {
        console.log('start');
        for (var i in Lst) {
            SendMyFunction(Lst[i]);
        }
        console.log('end');
    })
    -> SGBR=SQL SERVER 2014 <-

  2. #2
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 451
    Points : 4 600
    Points
    4 600
    Par défaut
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $('#SendCalculGlobal').click(function () {
        console.log('start');
        for (var i in Lst) {
            SendMyFunction(Lst[i]);
            if(i === Lst.length-1) {
                    console.log('end');
            }
        }
     
    })
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2002
    Messages : 80
    Points : 47
    Points
    47
    Par défaut
    effectivement les logs sont dans l'ordre.

    Mais la procédure appelée, renvoie des données qui doivent être consolidée à la fin de l'appel de toutes les procedures.

    Dans dans notre cas il lance bien toutes les procédures (et me fait saturer le programme derrière la procedure au passage...)
    et lance la consolidation avant que les procedures terminent le renvoie de leur datas...
    en fait il faudrait que je puisse lancer en synchrone et non en Asynchrone...

    :/
    -> SGBR=SQL SERVER 2014 <-

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    dans le traitement de "SendMyFunction" comment est défini que le traitement de la fonction est fini ?

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2002
    Messages : 80
    Points : 47
    Points
    47
    Par défaut
    en gros il y'a un appel ajax & quelques autres fonctions + le retour d'un objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    function SendCometCalc(circ) {
     
        var v = JSON.stringify(circ.center);
        cent = JSON.parse(v);
        var dat = {}
        $.ajax({
            url: '/Ajax/CalcCircleChange',
            type: 'GET',
            dataType: 'json',
            data: { cle_uid: circ.cle_uid, rs: circ.rs, lat: cent.lat, lng: cent.lng, radius: circ.radius },
            success: function (data, statut) {
                //console.log(data);
                dat = {
                    "cle_uid": data.cle_uid,
                    "rs": data.rs,
                    "radius": Number(data.radius),
                    "cnt": Number(data.cnt),
                    "center": { "lat": Number(data.lat), "lng": Number(data.lng) }
                }
                UpdateDatas(dat);
                MycirclesCnt2 += 1;
                AffDet(dat);
                updateMagicBox();
                AddMyCnt();
            }
        });
        return dat;
    }
    -> SGBR=SQL SERVER 2014 <-

  6. #6
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 739
    Points
    4 739
    Par défaut
    Ta fonction SendCometCalc fait un appel Ajax, donc elle fait un appel asynchrone.
    Si tu veux attendre la fin de leurs exécutions pour lancer autre chose ensuite, il faut utiliser le système des promesses.

    https://developer.mozilla.org/en-US/...bjects/Promise
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

Discussions similaires

  1. Fonction dans une boucle qui ne renvoie rien
    Par blueice dans le forum Langage
    Réponses: 9
    Dernier message: 16/08/2008, 08h46
  2. [AJAX] variable de fonction dans une boucle
    Par Hurin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/06/2008, 09h51
  3. Changer un paramètre de fonction dans une boucle
    Par DeezerD dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 24/01/2008, 14h23
  4. Réponses: 10
    Dernier message: 07/01/2007, 12h03
  5. Réponses: 14
    Dernier message: 25/06/2006, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo