NodeRed,无法访问嵌套 for 循环中的变量
NodeRed, Not able to access the variables within the nested for loops
我对 nodejs 比较陌生,我在函数节点中的代码如下所示,
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;
}
我无法访问嵌套 for 循环内的 first
和 seconDigit
变量,那部分代码没有被执行。我的预期结果应该是一两个字符串。
一个是 *,*,#000000
,另一个基于 temp
值的长字符串类似于 *,*,.....
。但是当我取消注释上面的几行时,它们似乎工作正常。我做错了什么,我应该更改什么以访问 for 循环内的值?
几天前我也遇到了同样的问题。而不是连接您从中获取 msg.payload.temperature 的节点。只需使用 global.set("first",msg.payload.temperature);
在该节点中并使用
访问它
temp=global.get("first");
。
因此您的代码的顶部将是
temp=global.get("first");
var first=parseInt(temp/10);
var seconDigit=parseInt(temp%10);
我对 nodejs 比较陌生,我在函数节点中的代码如下所示,
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;
}
我无法访问嵌套 for 循环内的 first
和 seconDigit
变量,那部分代码没有被执行。我的预期结果应该是一两个字符串。
一个是 *,*,#000000
,另一个基于 temp
值的长字符串类似于 *,*,.....
。但是当我取消注释上面的几行时,它们似乎工作正常。我做错了什么,我应该更改什么以访问 for 循环内的值?
几天前我也遇到了同样的问题。而不是连接您从中获取 msg.payload.temperature 的节点。只需使用 global.set("first",msg.payload.temperature);
在该节点中并使用
访问它
temp=global.get("first");
。
因此您的代码的顶部将是
temp=global.get("first");
var first=parseInt(temp/10);
var seconDigit=parseInt(temp%10);