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