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

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2018
    Messages : 2
    Points : 3
    Points
    3

    Par défaut Copies de variables dans une boucle

    Bonjour a tous,

    je souhaite mettre en base de donnée les ping de différents sites, toutes les X secondes.

    voici mon code :
    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
    for (var host = 0; host < hosts.length; host++)
    	{
            var val = host;
            ping.promise.probe(hosts[val], {timeout: 10,}).then(function (res)
         	{
         		var result = parseFloat(res.avg);
     
         		if (min[val] > result)
         			min[val] = result;
         		if (max[val] < result)
         			max[val] = result;
     
         		moy[val] = ((moy[val] * qte[val]) + result) / (qte[val] + 1);
     
         		qte[val]++;
     
                   console.log("val : " + val);
     
         	});
    	}
    mon socis est que le temps que le ping se fasse, la variable val est déja au maximum (3) et donc on modifie systèmatiquement la même position dans le tableau.
    le log me donne constamment
    val: 3


    j'ai tenté de mettre "var val = host;" (il est dans le code) pour créer une nouvelle variable dans chaque instances, sans succès.


    ps, le problème se fait aussi pour l'inscription en BDD : la requête est bonne a l'envoi, mais dans l'appel une fois la requête finie, j'ai toujours la dernière requête...

    une idée pour corriger cela ?

  2. #2
    Invité
    Invité(e)

    Par défaut

    slt,

    1) let val au lieu de var val (voir https://www.developpez.net/forums/d1...ere-iteration/)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (var host = 0; host < hosts.length; host++)
        {
            let val = host;
            ...
            }

    2) forEach ou map (ou reduce..)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    hosts.forEach(host=>{
        var val = host
        ping.promise.probe(hosts[val], {timeout: 10,}).then(function (res)
        {
            ...
     
        });
    })
    a noter que tu devrais probablement utiliser map (et retourner les promises pour synchroniser via Promise.all)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2018
    Messages : 2
    Points : 3
    Points
    3

    Par défaut

    ça marche bien avec let :-)

    merci :-)
    je suis spécialisé en C donc certains concepts me sont inconnus, mais celui là n'est pas mal :-)

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

Discussions similaires

  1. [ANT] affectation de variables dans une boucle
    Par dino_xrc dans le forum ANT
    Réponses: 6
    Dernier message: 17/12/2007, 19h47
  2. [VB.net] Declaration variable dans une boucle for
    Par nico10gbb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/05/2006, 11h45
  3. Réponses: 6
    Dernier message: 17/03/2006, 12h23
  4. Réponses: 3
    Dernier message: 01/09/2005, 11h56
  5. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23

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