2017-07-10 2 views
1

Je suis relativement nouveau à nodejs et mon code à l'intérieur du nœud de fonction ressemble à ceci,NodeRed, pas en mesure d'accéder aux variables dans le imbriquée pour les boucles

var temper=parseInt(msg.payload.temperature); 
temp=temper; 
var seconDigit=temp%10; 
temp=parseInt(temp/10); 
var first=temp%10; 
temp=temp/10; 
var count; 

//msg={"payload":{"one":first,"two":seconDigit}}; 
//return msg; 
if(msg.payload.screen=="on"){ 


var firstCol="*,*,#800000"; 
count=0; 

for(var i=1;i<=2;i++){ 

    for(var j=1;j<=6;j++){ 

     if(count<first){ 

      firstCol=firstCol+","+i.toString()+","+j.toString()+",#C0C0C0"; 
      count++; 
     } 

    } 
} 

count=0; 
for(var i=5;i<=6;i++){ 
    for(var j=1;j<=6;j++){ 
     if(count<seconDigit){ 
      firstCol+=","+i.toString()+","+j.toString()+",#C0C0C0"; 
      count++; 
     } 

    } 
} 
//msg={"payload":first}; 
//return msg; 
msg={"payload":firstCol}; 
return msg; 
} 
else if(msg.payload.screen=="off"){ 

var firstCol="*,*,#008000"; 
count=0; 
for(var i=1;i<=2;i++){ 
    for(var j=1;j<=6;j++){ 
     if(count<firstDigit){ 
      firstCol+=","+i.toString()+","+j.toString()+",#C0C0C0"; 
      count++; 
     } 

    } 
} 
count=0; 
for(var i=5;i<=6;i++){ 
    for(var j=1;j<=6;j++){ 
     if(count<seconDigit){ 
      firstCol=firstCol+","+i.toString()+","+j.toString()+",#C0C0C0"; 
      count++; 
     } 

    } 
} 
msg={"payload":firstCol}; 
return msg; 
} 
else{ 
    msg={"payload":"*,*,#000000"}; 
    return msg; 
} 

Je ne peux pas accéder aux variables first et seconDigit à l'intérieur de la boucle for imbriquée, cette partie du code n'est pas en cours d'exécution. Mon résultat attendu devrait être une deux cordes. l'un est *,*,#000000 et l'autre chaîne longue basée sur la valeur temp ressemble à quelque chose comme *,*,...... Mais quand je décommente le couple de lignes sur le dessus, ils semblent bien fonctionner. Qu'est-ce que je fais de mal et que dois-je changer pour accéder aux valeurs à l'intérieur de la boucle for?

Répondre

0

Même j'ai eu le même problème il y a quelques jours. Au lieu de connecter le noeud à partir duquel vous obtenez msg.payload.temperature. Utilisez simplement global.set("first",msg.payload.temperature);
dans ce nœud et accédez-y en utilisant
temp=global.get("first");.

Ainsi, la partie supérieure de votre code sera

temp=global.get("first"); 
var first=parseInt(temp/10); 
var seconDigit=parseInt(temp%10); 
+0

Il travaille. Mais pourquoi ça marche? –

+0

Par global.set() vous stockez d'abord la valeur de la température dans la variable globale. Donc, vous pouvez y accéder à partir de n'importe quel flux dans le programme nodered. Vous pouvez également utiliser flow.set() pour y accéder dans le même flux. –