2017-07-10 3 views
1

Ich bin relativ neu in NodeJS und mein Code innerhalb der Knotenfunktion sieht wie folgt aus,NodeRed nicht in der Lage für Schleifen, die Variablen innerhalb der verschachtelten zugreifen

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; 
} 

Ich bin nicht in der Lage, die first und seconDigit Variablen zuzugreifen Innerhalb der verschachtelten for-Schleife wird dieser Teil des Codes nicht ausgeführt. Mein erwartetes Ergebnis sollte ein zwei Strings sein. ist *,*,#000000 und die anderen langen Zeichenfolge basierend auf dem temp Wert sehen etwa so *,*,...... Aber wenn ich die paar Zeilen auf Kommentar-, sie scheinen gut zu funktionieren. Was mache ich falsch und was sollte ich ändern, um auf die Werte innerhalb der for-Schleife zuzugreifen?

Antwort

0

Auch hatte ich das gleiche Problem vor ein paar Tagen. Anstatt den Knoten zu verbinden, von dem Sie msg.payload.temperature erhalten. Verwenden Sie einfach global.set("first",msg.payload.temperature);
in diesem Knoten und darauf zuzugreifen
temp=global.get("first"); verwenden.

So ist der obere Teil des Codes wird

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

Es funktioniert. Aber warum funktioniert es? –

+0

von global.set() Sie zunächst den Wert der Temperatur auf die globale Variable zu speichern. Sie können also von jedem Fluss im nedierten Programm darauf zugreifen. Alternativ könnten Sie flow.set() verwenden, um im selben Ablauf darauf zuzugreifen. –

Verwandte Themen