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

NodeJS Discussion :

Ordre d'execution dans boucle foreach


Sujet :

NodeJS

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut Ordre d'execution dans boucle foreach
    Bonsoir à tous,

    j'ai un petit problème de compréhension dans le fonctionnement asynchrone de certaines fonction nodejs.
    DAns le bout de code ci dessous, dans mon foreach le tableau est parcouru puis une fois terminé il rentre dans les con.query(32 fois).(resultat du log sous le code)
    Je ne comprend pas pq cela effectue console.log(3) et console.log(4) avant les requêtes ?

    Merci d'avance pour vos eclaircissements
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    fs.readFile('./hello.json','utf8', function(err,data) {
            if(err)
            throw err;
            data = JSON.parse(data);
            data.forEach(function(element, index, array){
                    con.query("SELECT idStrava FROM segment WHERE idStrava = " + element['id'], function(err, result, fields){
                        console.log(0);
                        if(result.length <= 0) {                        
                            var param = [element['id'], 
                                        blabla ...
                                        ]
                            var sql = 'INSERT INTO segment VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
     
                            con.query(sql, param,function(err, result) {
                                if(err) throw err;
                                console.log("datas inserted");
                            });
                        }
                    });
                    console.log(1);
                    con.query("SELECT * FROM segment_effort WHERE idStrava ="+element['time']['id'], function(err, result, fields){
                    console.log(2);
     
                        if(result.length == 0) {
                            var param = [
                                blabla...
                            ];
                            var sql = "INSERT INTO segment_effort (idStrava, segment_id, resource_state, elapsed_time, moving_time, start_date, start_date_local, start_index, end_index, average_watts, average_heartrate, max_heartrate)VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
                            con.query(sql, param, function(err, result){
                                if(err) throw err;
                                console.log("data inserted") 
                            });
                        }
                    });
     
                    console.log(3)
                if( element['id'] in seg) {
                    console.log(4);
                } else {
                    console.log(4);
                }
                console.log("index : "+index);
            });
        res.render('index.html.twig', {segment:seg});
        });
    le log:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    index : 493
    1
    3
    4
    index : 494
    1
    3
    4
    index : 495
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2
    0
    2

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 975
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 975
    Points : 44 147
    Points
    44 147
    Par défaut
    Bonjour,
    Je ne comprend pas pq cela effectue console.log(3) et console.log(4) avant les requêtes ?
    il serait plus exact de dire avant le retour des requêtes, c'est cela l'asynchrone, le script continu « sa route » pendant que la requête court et revient !

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonjour no Smoking,

    merci pour ce retour. Effectivement c'est que j'ai fini par comprendre. Mais je ne pensais pas qu'une requête prenait autant de temps a s'executer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ordre d'execution dans le constructeur
    Par ailonn dans le forum Débuter
    Réponses: 8
    Dernier message: 12/02/2010, 13h39
  2. [2005] Data Flow dans boucle Foreach
    Par JB_paris dans le forum SSIS
    Réponses: 4
    Dernier message: 23/01/2009, 08h23
  3. Insérer puces (UL-LI) dans boucle foreach PHP
    Par RENAUDER dans le forum Langage
    Réponses: 1
    Dernier message: 21/01/2009, 11h18
  4. Problème commande do dans boucle foreach
    Par jchampen dans le forum Langage
    Réponses: 5
    Dernier message: 23/10/2008, 14h56
  5. [Boucle] Ordre des Controls dans un ForEach
    Par Djekill dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/12/2007, 10h38

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