Function函数

目录


1.多节点输出

Function函数的输出可以配置多路输出,输出也不一定都为msg,可设自定义格式
配置多路输出:

  • Function块设置输出点数
  • 运行函数中return [msg,null...]对应输出点顺序;
bash 复制代码
if(msg.payload===1){
    msg.payload="主卧灯1打开"
    return [msg,null];  //返回节点与设置对应
}
else if(msg.payload===2){
    msg.payload="次卧灯2打开"
    return [null,msg];  //返回节点与设置对应
}

自定义变量输出:

  • 输出为对象的属性名(特殊)
  • Debug中输出对应属性名即可

2.数据处理

  • 简单分流用 Switch
  • 复杂逻辑用 Function
  • 结合使用效果更佳(如 Function 预处理后由 Switch 分流)
  • msg.payload =JSON.parse(msg.payload) //将内容转换为JSON格式的对象
  • msg.payload = Object.keys(msg.payload) //获取内容中的键

3.上下文

流间天然隔离,全局数据需谨慎管理

  • 节点流(context):单个节点内有效(计数器-临时变量)
  • 流程流(flow):同一流程共享(中间结果-静态变量)
  • 全局流(global):全局范围有效(API-全局变量)

方法:

  • context.get('键') //设置节点流上下文属性【flow、global】
  • context.set( '键',值) //设置节点节点流上【flow、global】
  • context.keys() //返回节点流所有属性列表【flow、global】
bash 复制代码
===context/flow/global===
let count = context.get('a') || 0; //从上下文中读取变量 a(若不存在则初始化为0)
count += 1;                         
context.set('a', count);  //将更新后的 count 存回上下文
msg.payload = `本流已处理 ${count} 条消息`;  // 将当前 count 的值赋给消息的 payload 字段
return msg;

===示例1(延时计算)===
let a= new Date();
flow.set('time1',a)
延时
let b= new Date();
flow.set('time1',b)
---
let a = flow.get('time1');
let b = flow.get('time2');
msg.payload = (b-a)/1000;
---
输出1.456

4.环境变量

可以通过env.get方法获取设置的环境变量,无限制,只要设置的环境变量都可以获取
流程页设置环境变量

  • 双击'流程1'标签页,选择环境变量,点击添加

全局设置环境变量

  • 点击管理-设置-用户设置-环境变量,点击添加

示例:

bash 复制代码
let a = env.get("bl1")
let b = env.get("bl2")
msg.payload = b
return msg;

5.初始化

通过Function节点初始化函数设置结合context.global.XX(),可在程序部署后直接声明一个全局可调用的函数,可在任意地方对其进行触发

函数语法:

bash 复制代码
function a(){
}

a()  //调用函数

初始化示例:

bash 复制代码
---初始化函数---
// 部署节点后,此处添加的代码将运行一次。 
function a1(){  //定义函数a1
    let a= {}
    a.payload = "shuju1"   //初始化数据
    return a    //返回值a
}
context.global.abc = a1  //定义全局函数abc

---运行函数---函数的调用
msg.payload = context.global.abc()
return msg;

5.特有方法

除了可用JavaScript的方法外,还可用node-red特有的方法

  • node.status():更新节点状态(实时状态反馈(如"连接中/成功"))
  • node.error(): 记录错误日志(异常中断、错误上报)
  • node.send() :发送消息到下游(多分支输出、异步消息传递)
bash 复制代码
//显示传感器实时值:
node.status({ fill: "green", shape: "dot", text: `温度: ${msg.payload}℃` });  

//拆分消息到不同分支:
node.send([msgA, msgB]); // 输出到端口1和端口2  

//API 调用失败处理:
node.error("API请求失败", msg);  

相关推荐
嵌入式-老费2 分钟前
esp32开发与应用(看门狗测试)
java·开发语言·数据库
闫有尽意无琼6 分钟前
qt控件未指定父对象或delete致堆内存泄露
开发语言·qt
Cx330❀8 分钟前
【Linux网络】从零定制应用层协议:黏包问题、全双工缓冲区与 Jsoncpp 序列化深度解析
linux·运维·服务器·开发语言·网络·c++·人工智能
小赖同学啊9 分钟前
蓝绿部署与金丝雀部署的区别
物联网
山东布谷网络科技11 分钟前
海外直播语聊APP功能与UI升级的关键关注点
开发语言·ui·app store·谷歌上架·海外直播app开发·海外语聊平台搭建·多语言直播平台定制
江屿风13 分钟前
C++图论基础Bellman-Ford与spfa算法如何判断负环
开发语言·c++·笔记·算法·图论
艾莉丝努力练剑18 分钟前
【Linux网络】五种IO模型与非阻塞IO
linux·运维·服务器·开发语言·网络·tcp/ip
Dylan的码园23 分钟前
python基础与快速入门
开发语言·python
zzz_236825 分钟前
【Java基础】HashMap——为什么JDK 7扩容会死循环,JDK 8又是怎么修好的
java·开发语言
程序猿乐锅25 分钟前
JavaSE 总复习:语法到多线程全梳理
java·开发语言