首页 > 解决方案 > 在 Node-Red 的函数节点中是否可以嵌套 If 语句?

问题描述

关于函数节点:在我看来,好像我不能在其他 If 或 Switch 中使用 If-Elif-Else 语句。

问题:是否可以嵌套 If 或 Switch?或者有没有更好的方法在 Nodered 中实现这样的事情?

例子:

switch (msg.payload.auto)
{
case "Manuell":
    if (msg.payload.schattierung == "Ost")
    {
        var levelValue = "Schatten"
    }
    else if (msg.payload.schattierung == "Alle")
    {
        var levelValue = "Schatten"
    }
    else
    {
        var levelValue = "Offen"
    }

case "Auto":
    if (msg.payload.azimuth <= 225)
    {
        var levelValue = "Offen"
    }
    else if (msg.payload.azimuth < 235)
    {
        var levelValue = "Halb"
    }
    else
    {
        var levelValue = "Offen"
    }

default:
    var levelValue = "Offen"
}

var msgLevel = { payload: levelValue }

return msgLevel

标签: node-red

解决方案


嵌套 If 块或嵌套 Switch/If 块可以正常工作,但您也可以使用 switch 节点和更改节点集合构建类似的东西来设置值。

需要注意的一点是,在功能节点中用新消息完全替换传入消息是非常低效和糟糕的形式。最好只替换现有的msg.payload. 这也意味着使用msg对象上的其他键来保持状态的任何节点继续正常工作(例如,http-response 节点需要由 http-in 节点创建的原始消息才能使其一路顺流工作适当地)


推荐阅读