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 :

Portée des réponses


Sujet :

NodeJS

  1. #1
    Nouveau Candidat au Club
    Portée des réponses
    Bonjour Tout le Monde,

    je suis novice en Javascript, et j'avoue que j'ai du mal à comprendre ce que je fais...

    Alors, J'essaie d'utiliser la librairie snmp-native de NodeJS de la sorte :

    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
     
     
      var switchObj = { hostname: switchName, ports : [] };
     
      let session = new snmp.Session ({ host: switchName, community: "public" });
     
      session.get({ oid: oidNumberOfPorts }, function (error, varbinds) {
        if (error) {
          console.log("Fail to get Number of Ports available on " + switchName + " <img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />' ");
          return null;
        } else {
          switchObj.portsNumber =  varbinds[0].value ;
          for ( let i = 1; i <= switchObj.portsNumber + 1 ; i++) {
            switchObj.ports.push([]);
           }; 
        }
        console.dir(switchObj)
      });
    console.dir(switchObj)


    Pourquoi le premier console.dir() me renvoit bien mon objet avec .ports initialisé avec autant de tableau que varbinds[0].value retourne,
    Tandis que le second me renvoit { hostname: switchName, ports : [] };

    Qu'ais-je mal compris aux portée de Javascript ?
    Est-ce normal ? et pourquoi ?

    Merci,
    Jeremy.

  2. #2
    Membre expert
    Salut,

    On n'a pas tout pour pouvoir tester mais je pense que c'est un problème lié à l’asynchrone comme dans ce fil : https://www.developpez.net/forums/d1...etour-fonction...

    C'est-à-dire que lors de l’exécution du deuxième console la fonction de rappel (celle que tu as passée en paramètre de la fonction session.get) n'a pas encore été exécutée et par conséquent l'objet switchObj n'a pas encore été modifié...

  3. #3
    Invité
    Invité(e)
    Bonjour,

    Citation Envoyé par mereej974 Voir le message
    ...Je suis novice en Javascript,... , et j'ai du mal à comprendre ce que je fais...

    Alors, J'essaie... NodeJS....
    Ce ne serait pas comme dire :

    "...Je n'ai jamais conduit de voiture,... et je ne connais pas le Code de la Route...

    Alors, J'essaie... une Formule 1..."
    Balèze......

  4. #4
    Nouveau Candidat au Club
    Bonjour et Merci de vos réponse !

    @jreaux62 : on peux le voir comme ça :-)

    @Beginner. : C'est vrais que ça y ressemble fortement.

    si je log un peux plus j'ai :
    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
     
    Apres le session.get :
    { hostname: 'swgen1', ports: [] }
    { hostname: 'swgen1', ports: [] }
     
    GET /switchs 304 58.505 ms - -
    Pendant le session.get, juste apres la boucle :
    {
      hostname: 'swgen1',
      ports: [
        [], [], [], [], [], [], [], [], [], [], [], [],
        [], [], [], [], [], [], [], [], [], [], [], [],
        [], [], [], [], [], [], [], [], [], [], [], [],
        [], [], [], [], [], [], [], [], [], [], [], [],
        [], [], [], [], [], [], [], [], [], [], [], [],
        [], []
      ],
      portsNumber: 61
    }

    Donc j'imagine que ma fonction session.get est asynchrone. Mais comment "attendre" ma donnée après session.get ? Oo

    Jeremy.

  5. #5
    Membre expert
    Citation Envoyé par mereej974 Voir le message

    Donc j'imagine que ma fonction session.get est asynchrone. Mais comment "attendre" ma donnée après session.get ? Oo
    Dans le callback comme tu le fais dans ton code
    https://github.com/calmh/node-snmp-n...tions-callback

  6. #6
    Membre expert
    Citation Envoyé par mereej974 Voir le message

    Donc j'imagine que ma fonction session.get est asynchrone. Mais comment "attendre" ma donnée après session.get ?
    Comme l'a dit fredoche : en utilisant le callback (ce que j'ai traduit par "fonction de rappel" dans mon message précédent)...

    Et c'est ce que tu as déjà fait d'ailleurs, comme tu l'as remarqué toi-même, le premier console (contrairement au second) te donne bien le résultat eh bien c'est parce qu'il est dans la fonction de rappel, le résultat se trouve dans le paramètre varbinds de la fonction de rappel sauf si bien sûr il y a une erreur...

###raw>template_hook.ano_emploi###